今日は 第四章: Hello再帰! さらにいくつかの再帰関数 のzipまで(位置1400/11175)読み進めました。
再帰関数はなるべくテキストを見ないで自分で実装してからテキストで答え合わせをするという方法で進めました。
take
の実装でガードで otherwise
を使わずに次のパターンマッチにマッチさるというのを思いつかず上手く実装できませんでした。
take' :: Int -> [a] -> [a] take' n _ | n <= 0 = [] take' _ [] = [] take' n (x:xs) = x:take' (n-1) xs
これを見たあとで、このテクニックを使わなくても実装できると思ってこういう実装を書いてみました。 haskell
的にどちらの実装が適切かはまだ理解していません。
take'' :: Int -> [a] -> [a] take'' _ [] = [] take'' n (x:xs) | n <= 0 = [] | otherwise = x : take'' (n-1) xs