🚃
中置関数の使い方について(Haskell)
中置関数とは、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関数についてはまた別の記事で解説しますが、『演算子は丸かっこ()で囲むと、前置関数として使える..』というのを頭の片隅に入れておいて下さい。
Discussion