駆け足で読む『プログラミングHaskell』6 再帰関数

  • Haskellではループの代わりに再帰関数を使う
  • 整数に対する再帰は以下のような感じ
f :: Int -> Int
f 0 =1
f (n+1) = (n+1) + (f n)
    • 「関数fの入出力の型はInt。fに0を渡したら1を返す。それ以外のときは、n+1を渡したら 関数fをnに適用した結果にn+1を加えた値を返す」
  • リストに対する再帰
    • (x:xs)というのがリストを先頭の要素xと残りxsとに分けることを用いて次のように書ける
f :: Num a => [a] -> a
f [] = 1
f (x:xs) = x * (f xs)
    • 「関数fはNumクラスに属する型をaとしたときに、その任意のaを型とした値のリスト([a])を引数にして、返り値として型aの値を返す。リストが空のときは1を返し、それ以外のときは、リストを先頭要素xとそれ以外xsに分けて、fをxsに適用した結果にxを掛けたものとする」
  • 複雑にした再帰
    • 複数のリストを引数にして再帰する
    • 再帰関数の定義の中に、自分自身の関数が複数回出てもよい
    • 複数の関数が相互参照してもよい
  • この章の書かれ方:再帰Haskellでよく使うので『習熟しましょう』という感じ