gpt4 book ai didi

Haskell 随机吐出错误的数字

转载 作者:行者123 更新时间:2023-12-03 14:53:23 25 4
gpt4 key购买 nike

我刚开始学习函数式编程,我的选择是haskell。
几天没问题,直到控制台中发生了一些奇怪的事情

起初我以为教程(http://learnyouahaskell.com/starting-out)是错误的

Prelude> [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]  
[(1,1,1)]

应该是 (3,4,5)(4,6,8) .
我试过 3^2+5^2 ,它会吐出大量数字(大约 60 行数字,大约 3000 位数字); 4^2+3^2似乎产生相同的数字。

尝试添加任何数字,结果将是 100
Prelude> 100 + 200
100
Prelude> 300 + 500
100

我关闭窗口并重新打开它,问题就解决了。

Haskell中是否经常发生这种错误计算?或者我的 Haskell 版本在下载时损坏了?或任何机会这是一个罕见的错误?

最佳答案

正如@BluePeppers 所建议的那样,正在发生的事情是您以某种方式完成了相当于 let a+b = 100 的操作。在 ghci 中,之后它使用该定义而不是通常的 +在你所有的表达中。

您可能仍然想知道为什么会给出如此庞大的数字,直到我意识到第二点:重新定义 (+)还重新定义其优先级,默认为 9(最高)。所以你的例子被解释为:

[ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]

变成
[ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^100^2 == c^2]


3^2+5^2

变成
3^100^2

关于Haskell 随机吐出错误的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25639425/

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