Haskellのライブラリ関数takeWhileを実装してみます。
リスト先頭から述語を満たす要素を取り出しリストを生成する..機能を持ちます。
関数を引数とする高階関数として定義してみます。
定義は、
takeWhileの型定義
takeWhile :: (a -> Bool) -> [a] -> [a]
引数を二つとり、リストを返す関数。
その引数は、
”リストの要素一つとり、論理値を返す関数”を引数1
リストを引数2
...とする関数と定義。
再帰の基底条件
リストが空になること。空リストを返す。
再帰のアイディア
リストの先頭要素を取り出し、述語判定実施。
述語判定で、”真”と判定された場合、リスト要素をcons、そして再帰。
述語判定で、”偽”と判定された場合、空リストを返す。
プログラム
再帰的定義による高階関数takeWhileの定義
higher_takeWhile :: (a -> Bool) -> [a] -> [a]
higher_takeWhile f [] = []
higher_takeWhile f (x:xs)
| f x = x : higher_takeWhile f xs
| otherwise = []