高階関数の概要
F#をはじめとする関数型プログラミング言語の関数は基本的にはファーストクラスオブジェクトです。つまり、整数値や文字列値と同じように値として扱うことができます。そのため、関数型プログラミング言語では、関数の引数に関数を取れたり、関数を戻り値として返す関数を作成することができます。まさしく、この「関数を引数に取ったり」、「戻り値として関数を返したり」する関数のことを 高階関数(= higher order function) と言います。
F#はC言語などの命令型言語とは異なり、ループ処理を高階関数を使って記述することが圧倒的に多いです。これは余談ですが、C#でも関数がファーストクラスオブジェクトであるため、関数型プログラミング的な処理を利用することができます。皆さんにお馴染みなところで言えば LINQ がまさにそうですね。
F#でもLINQを使うことはできますが、もっと関数型プログラミングに向いている作りのモジュールが提供されています。この章ではそれらのごく一部の紹介と利用方法について紹介します。
サンプルでみる高階関数
前節でご紹介したとおり、F#にはLINQとは別にリストや配列などに対する操作をするためのモジュールが用意されています。それらの中には、もちろん高階関数として宣言されているものも数多く存在しています。
本節では、そのモジュールの中でもよく使われるものの紹介を簡単にしたいと思います。
filter関数
● List.filter 関数
● Array.filter 関数
● Seq.filter 関数
map関数
● List.map 関数
● Array.map 関数
● Seq.map 関数
iter関数
● List.iter 関数
● Array.iter 関数
● Seq.iter 関数
exists / exists2関数
● List.exists / List.exists2 関数
● Array.exists / Array.exists2 関数
● Seq.exists / Seq.exists2 関数
collect関数
● List.collect 関数
● Array.collect 関数
● Seq.collect 関数
find関数
● List.find 関数
● Array.find 関数
● Seq.find 関数
forall関数
● List.forall 関数
● Array.forall 関数
● Seq.forall 関数