私はHaskellとプログラミング全般に不慣れです。nから一連のコラッツ数を生成する関数を定義しようとしています。私は持っている:
collatz n = (collatz' n) : 1
where collatz' n = (takeWhile (>1) (collatz'' n))
where collatz'' n = n : collatz'' (collatz''' n)
where collatz''' 1 = 1
collatz''' n = if (even n) then (div n 2) else ((3*2)+1)
これを GHCi で実行すると、次のエラーが発生します。
No instance for (Num [t])
arising from the literal `2' at <interactive>:1:7
Possible fix: add an instance declaration for (Num [t])
これが何を意味するのかわかりません。問題は、リストに「1」を追加しているようです。この問題が発生する理由は
collatz' n = (takeWhile (>0) (collatz'' n))
正しい Collatz シーケンスに続く "1" の無限シーケンスを生成します。でも、
collatz' n = (takeWhile (>1) (collatz'' n))
nから"1" を除くすべてのコラッツ数を生成します。私は何を間違っていますか?