Я новичок в 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))
генерирует бесконечную последовательность «1» после правильной последовательности Коллатца;однако
collatz' n = (takeWhile (>1) (collatz'' n))
генерирует все числа Коллатца из n , кроме "1".Что я делаю не так?