すごい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が奇数のとき
ラムダ式。分かるような分からないような。「わかっていない感じ」が続く。きもちわるい。とりあえず進むのはよろしくないでしょうか。うーむ。