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