Okada Hiroshi の blog

typo が多いです

Haskell 勉強記録 4日目

今日は 第四章: 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