理想未来ってなんやねん

娘可愛い。お父さん頑張る。

Haskell 15日目 〜 値としての関数 〜

Haskell 15日目。

本日から『第8章 関数』に進みます。

値としての関数

関数束縛

値としての関数に変数を束縛する面を強調したいとき、関数定義を関数束縛(function binding)と呼ぶことがあります。

高階関数

関数は整数や文字と同じく値なので、関数に引数として渡したり、返り値として返したりすることができます。
このように、関数を引数として受け取ったり、返り値として返したりする関数のことを高階関数(higher order function)と言います。

無名関数

関数を定義すると、新しい関数が作成されると同時に変数に束縛されますが、2つを分離することもできます。
作成されたときに変数を束縛しない関数のことを無名関数(anonymous function)と呼びます。

無名関数は次のように書きます。

\num -> num * num

『\num -> num * num』が無名関数を表す式で、『\』(ラムダ)のあとの『num』がパターンで、『->』のあとの式が関数の本体です。

無名関数と高階関数

無名関数と高階関数を組み合わせると関数をあらかじめ定義しなくておかなくとも高階関数が使えるので便利です。

無名関数を使うと次のような書き方ができます。

map (\n -> n * n) [1, 2, 3, 4, 5]

無名関数でのパターンマッチ

通常の関数定義と同じように、無名関数の引数でもパターンマッチが使えます。

無名関数のパターンマッチの使用例は次の通りです。

map (\(x, y) -> x + y) [(1, 11), (2, 12), (3, 13)]

この式は、リストの各要素のタプルについて、第1要素と第2要素を足した値のリストを返します。
尚、通常の関数定義では複数のパターンを並べておいて順番を試すことができましたが、無名関数では使えるパターンは1つだけです。


今日のところはここまで。