すごいHaskell本

5章の続き、p70より。

下は、p72,chain関数の定義です。

chain :: Int -> [Int]
chain 1 = [1]
chain n
    | even n = n : chain (n `div` 2)
    | odd  n = n : chain (n * 3 + 1)

上のコードをghciに読ませると、non-exhaustiveと言われます。even n と odd n で全
てのパターンは網羅しているのだけれど、ghciはそこまで頭が良くないみたいですね。
otherwiseがないといけないみたい。警告が出るのは気持ち悪いですが、otherwiseを使
うと意図が分かりにくいコードになるので、このままにします。

-- otherwiseを使った場合
chain :: Int -> [Int]
chain 1 = [1]
chain n
    | even n    = n : chain (n `div` 2)
    | otherwise = n : chain (n * 3 + 1)  -- nが奇数のとき

ラムダ式。分かるような分からないような。「わかっていない感じ」が続く。きもちわるい。とりあえず進むのはよろしくないでしょうか。うーむ。