mike-neckのブログ

Java or Groovy or Swift or Golang

『すごいHaskell』第6章メモ

このようなリストに対する標準的な再帰パターンでは、再帰を明示的に書くよりも、畳込みを使うほうがよいでしょう。そのほうが読みやすく理解しやすいからです。foldrの呼び出しは誰が見ても畳み込みですが、明示的な再帰を読むには考える時間が必要です。

『すごいHaskellたのしく学ぼう!』(p.102)

再帰を使った場合のコード

findKey:: (Eq k) => k -> [(k, v)] -> Maybe v
findKey _ [] = Nothing
findKey key ((k, v):xs)
    | k == key  = Just v
    | otherwise = findKey key xs

foldrを使った場合のコード

findKey:: (Eq k) => k -> [(k, v)] -> Maybe v
findKey =
    foldr
        (\(k, v) acc -> if k == key then Just v else acc)
        Nothing