29

しましょうf x y = x * y。この関数を 2 つの方法で適用できます: f 5 6、または中置記法を使用して5 `f` 6. 演算子の規則はこの最後の式に適用されますか? このアプリケーションにはどのような優先順位がありますか? これは関数適用の別の形式であり、優先順位も最も高くなりますか?

コンパイラはこの特殊な形式を (``および/または文字 (?) で始まる名前のために) 認識し、実際にはこれを演算子と見なすのではなく、通常の関数適用として扱うと思います。

4

2 に答える 2

27

Haskell 98 Reportには、それを明確にするOperator Applicationsに関するセクションがあります。

演算子は、+ や $$ などの演算子記号か、`op` などの逆引用符で囲まれた通常の識別子です。たとえば、前置適用 op xy を書く代わりに、中置適用 x `op` y を書くことができます。`op` に固定宣言が与えられていない場合、デフォルトで最高の優先順位と左結合性になります (セクション 4.4.2 を参照)。

他の回答で示されているように、レポートには、独自の固定性を定義できる固定性宣言に関するセクションもあります。次に例を示します。

infixl 7 `op`
于 2011-11-15T16:01:28.603 に答える
12

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

infixl 7 `quot`

バッククォートされた中置関数のデフォルトの固定性はinfixl 9であるため、同じ固定性を持つ他の中置演算子と同様に扱われます。

于 2011-11-15T15:51:35.460 に答える