2013-04-24 20 views
6

度で角度を扱う場合、度数記号(°)を後置演算子として使用するように定義する必要があります。Haskellで後置演算子を定義するにはどうすればよいですか?

let o = pi/180 

とこのようにそれを使用します:現在、私は(GHCiの中で)この行を使用し

tan(11*o) 

が、私はちょうど行きたい:より明確である

tan 11° 

。度演算子は、 'tan'と他の関数より高い優先順位を持つ必要があります。

私が持っている最も近いです:

let (°) x _ = x*pi/180 

は次のように使用:

tan(11°0) 

が、デフォルトの優先順位は括弧がまだ必要とされていること、及びダミー番号と、この代替案があります私が現在使っているものよりも悪い。

+8

"degree演算子は、' tan'や他の関数よりも優先順位が高いはずです。 < - それはうまくいかないでしょう、関数のアプリケーションは、言語仕様によって最も高い優先順位を持っています。 –

+0

度を表すnewtypeで新しい数値型(Doubleやその他の値をラップする)を単純に定義しないでください。もちろん、等価性を定義したい場合は、度の "モジュラー"な性質に注意を払う必要があります。 –

+0

ハスケルは、あなたが書いたことに慣れているようなものを作ることのできる種類の言語ではありませんそれ。 PerlやPythonとは異なり、Haskellのインフィクス構文は実際は非常にトリミングされていてシンプルですが、このような単純な基盤でも非常に効率的な簡略化が可能で、多くの括弧物事を読めるようにするしかし、後者の点は、これらのかなり厳密な構文解析ルールがあることの1つにあります。 – leftaroundabout

答えて

3

fixity declarationsをチェックしてください。これにより、挿入演算子の優先順位を変更できます。優先順位を高く設定しないように注意してください。そうしないと、他のオペレータが期待どおりに動作しません。例えば

infixl 7 ° 
(°) x _ = x*pi/180 

編集:ああ、@Danielフィッシャーの権利 - 機能のアプリケーションは、最高の優先順位

11

あなたがすることはできませんを持っているので、これはあなたの現在のニーズのために動作しません、少なくともこの報告書で定義されているようにHaskellでは。しかし、a GHC extension that allows postfix operatorsがあります。

残念ながら、これはあなたに必要なものすべてを与えるわけではありません。単項否定演算子がしばしばするように、特に括弧が必要です。

関連する問題