無名関数とは、一時的に使用するために使い捨てる前提で生成する、名前の無い関数です。
Haskellではラムダ式(ラムダ関数)を記述することで無名関数を定義することが出来ます。
ラムダ関数とは、文字ラムダ (λ) を使った式によって表記する関数です。
ラムダ式で記述された関数は、一時的な使い捨ての関数として利用することができます。
なお、ラムダ関数は、匿名関数(無名関数)とも呼ばれます。
無名関数は「\ (バックスラッシュ)」の後に仮引数を並べて書き、「->」の後に本体を書きます。
なお、先頭にバックスラッシュを置くのは、ギリシャ文字のラムダ(λ)に似ているからといわれています。
\ 引数 -> 式
以下の式は、引数3つ(xyz)を加算する無名関数を作成し、無名関数に対して値(1、2、3)を渡していることを意味します。
Prelude> (\ x y z -> x + y + z) 1 2 3 6
以下のプログラムは、通常形式の関数です。
ここで、addは2つの引数を加算する関数という意味になります。
#!/usr/bin/env runghc add :: Integer -> (Integer -> Integer) add x y = x + y main = print $ add 3 4
無名関数にします。
ここでは、addは「2つの引数を加算する無名関数」を生成する関数という意味になります。
#!/usr/bin/env runghc add :: Integer -> (Integer -> Integer) add = (\ x y -> x + y) main = print $ add 3 4
マッピングを行う高階関数mapは、第一引数には関数、第二引数にはリストとり、結果をリストとして返します。
第一引数に無名関数(2を加算する関数)を設定して、第二引数に整数値のリストを渡すことで、第二引数のリスト要素すべてを2加算したリストを作成することができます。
Prelude> map (\x -> x + 2) [1,2,3,4] [3,4,5,6]