中置関数の使い方について(Haskell)

3375 ワード

中置関数とは、2つの引数の真ん中に関数を置く仕組みです。 ほとんどのHaskell関数は、関数名の後に引数が続くように記述します。しかし``(バッククォート)で囲むことによって、引数の間に関数を書けます。

ここでも2つの数値を足し算するaddtwo関数を定義しました。``(バッククォート)で囲むことによって、addtwoという名前が真ん中に来ています。

addtwo :: Int -> Int -> Int
addtwo a b
    = a + b
main = print (10 `addtwo` 20)
  -- = print (addtwo 10 20)と全く同じ

print (10 addtwo 20)と書いても、print (addtwo 10 20)と書いても全く同じです。あえて真ん中に書いた方がわかりやすい場合もあるので、こちらも関数を記述する便利な方法となっています。

中置演算子の関数化

+-*/などの代表的な演算子は、実は関数の一部です。これらはデフォルトで中置関数として提供されています。これらの演算子のことを中置演算子と呼びます。

こちらは``(バッククォート)で囲むのとは逆に、丸かっこ()で囲むと前置関数として利用できます。

main = print $ (+) 10 20

演算子はprint $ 10 + 20と書いた方がわかりやすいですよね。ただしこれから学ぶmap関数を学ぶ際に、こちらの方法は使います。具体例としてはこんな感じです。

main = print $ map (+3) [1,2,3]

ここでは[1,2,3]の3つの要素それぞれに(+3)を適用しています。なので実行結果としてはこちらが出力されます。

[4,5,6]

map関数は文脈のある値(値+αの機能を持った値)に関数を適用させるための仕組みです。便利なので何度も使うことになりますし、そこから派生するファンクター・モナドとも関係のあるすごく大事な関数です。

map関数についてはまた別の記事で解説しますが、『演算子は丸かっこ()で囲むと、前置関数として使える..』というのを頭の片隅に入れておいて下さい。