Haskell 小ネタ: 中置

最近同期とした話。

Haskell では任意の関数をバッククォート(`)で囲むことで中置の演算子にできる。例えば、

div 6 2

は、

6 `div` 2

のように書ける。

では、引数が3個以上あったらどうなるだろうか? 例えば、

foldr (+) 0 [1,2]

はどのように書けるのだろうか?(あるいは、使えないのか?)

...

...

...

答えは、

((+) `foldr` 0) [1,2]

のようになる。1,2番目の引数の間に入れるのは同じだが、丸括弧で囲むことになるという点が注目である。Haskell では関数がカリー化されていることと、関数適用の方が優先順位が高いことを思い出せばわかると思う。