🚃
中置関数の使い方について(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