2011-11-15 12 views
23

let f x y = x * y。この関数は、f 5 6、またはインフィックス表記5 `f` 6を使用して適用できます。この最後の式に演算子ルールが適用されますか?このアプリケーションはどのような優先順位を持っていますか?それは関数アプリケーションの別の形式なのでしょうか?また、それはまた最高の優先順位を持っていますか?ハスケル関数関数の適用優先​​度

私はコンパイラがこの特別な書式(``および/または文字(?)で始まる名前のため)を見て、実際にこれを演算子と見なすのではなく、通常の関数アプリケーションとして扱います。

+2

をHaskellの98構文は、あなたが優先レベルを選択することができます詳細はhttp://www.haskell.org/onlinereport/decls.html#fixityを参照してください。 –

+0

編集のためのAtal S-Zありがとう! – demi

答えて

22

Haskell 98 ReportはそれをクリアOperator Applicationsのセクションを有する:

オペレータは、オペレータよう+などの記号、または$$のいずれかである、又は重大なアクセント(バッククォート)で囲まれ 通常の識別子でありますたとえば、 「op」などです。例えば、接頭辞アプリケーションop x yを書く代わりに、 は、中置アプリケーションx `op` yを書くことができる。 `op`に対して固定具宣言 が与えられていない場合、デフォルトは最も高い優先度になり、 結合性が残っています(4.4.2項を参照)。

他の回答で示されているように、報告書はまた、あなたがたとえば、独自の固定性を定義することができますFixity Declarationsのセクションがあります。

infixl 7 `op` 
9

明示的な固定宣言がない場合、たとえば

infixl 7 `quot` 

backtickedインフィックス機能はinfixl 9のデフォルトの定着性を有するので、同一の定着性を有する他の任意の中置演算子と同様に扱われます。

+0

なぜinfixl 9にデフォルト設定されていますか?この選択の背後に何らかの理由がありますか、それとも恣意的ですか? – CMCDragonkai

+1

ところで、それはもちろん任意です。しかし、それを '中置 'にすると括弧なしで連鎖することができないので、連想の方向性を持つほうが便利です。右結合性はまれであるため、「infixl」は「最も驚くべきことではない」選択肢です。優先レベル9はプレフィックスアプリケーションの優先順位に最も近いため、プレフィックスアプリケーションと比較して最も低い値を変更します。それが決まったときは私はそこにいませんでしたが、私は考えていましたが、それは最も便利で最も驚くべきことではないことを期待して「インフィックス9」が選ばれたと思います。 –

+0

私は見ていますが、 '!!'や '$'のようなものはどうですか? '!!'が '$'よりも優先順位が高い理由は何ですか?テーブル内の演算子のすべてのプレースメントの理由を理解しようとしています。https://www.haskell.org/onlinereport/decls.html#fixity – CMCDragonkai

関連する問題