練習問題 4.3.7
便利な関数takeWhileおよび
dropWhileは,第1引数が自然数ではなく論理関数であることを除けば
takeおよび
dropと同じである. この点からいえば
filterともよく似ている.
takeWhile p xsの値は,
xsの先頭部分リストのうち,すべての要素について
p
を満たす最長のものである. 例を挙げると次のとおり.
takeWhile even [2,4,6,1,5,6] = [2,4,6]
dropWhile p xsの値はその残りの部分である. 例を挙げると以下のとおり.
dropWhile even [2,4,6,1,5,6] = [1,5,6]
takeWhileおよび
dropWhileを再帰的に定義せよ.
takeWhile :: (a -> Bool) -> [a] -> [a]
takeWhile _ [] = []
takeWhile p (x:xs)
| p x = x : takeWhile p xs
| otherwise = []
dropWhile :: (a -> Bool) -> [a] -> [a]
dropWhile _ [] = []
dropWhile p xxs@(x:xs)
| p x = dropWhile p xs
| otherwise = xxs