Haskellのライブラリ関数allを実装してみます。
リスト要素のすべてが述語をみたすか?判定する...機能を持ちます。
関数を引数とする高階関数として定義してみます。
定義は、
allの型定義
all :: (a -> Bool) -> [a] -> Bool
引数を二つとり、論理値を返す関数。
その引数は、
”リストの要素一つとり、論理値を返す関数”を引数1
リストを引数2
...とする関数と定義。
再帰の基底条件
リストが空になること。Trueを返す。
再帰のアイディア
リストの先頭要素を取り出し、述語判定実施。
結果を、すべてまとめて論理積演算する。
プログラム
再帰的定義によるallの定義
higher_all :: (a -> Bool) -> [a] -> Bool
higher_all f [] = True
higher_all f (x:xs) = f x && higher_all f xs
super easy...