gpt4 book ai didi

haskell - Collat​​z 函数中的错误 "No instance for (Num [t])"

转载 作者:行者123 更新时间:2023-12-01 08:19:17 26 4
gpt4 key购买 nike

我是 Haskell 的新手,也是一般编程的新手。我正在尝试定义一个函数,该函数从 n 生成 Collat​​z 数字序列。我有:

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))

在正确的 Collat​​z 序列之后生成一个无限的“1”序列;然而,
collatz' n = (takeWhile (>1) (collatz'' n))

从 n 生成除“1”以外的所有 Collat​​z 数。我究竟做错了什么?

最佳答案

(:) :: a -> [a] -> [a]您的第一行 collatz n = (collatz' n) : 1部队1成为[a] .
我猜你想要这样的东西 (collatz' n) ++ [1]并且您在 if (even n) then (div n 2) else ((3*2)+1) 中有错误应该有 ((3*n)+1或其他类似的东西 collatz''' 7 = 7

关于haskell - Collat​​z 函数中的错误 "No instance for (Num [t])",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com