gpt4 book ai didi

haskell - 为什么 MC Haskell 函数会导致堆栈溢出

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

我正在阅读 Haskell 的书,现在正在阅读第 8 章。在做练习时,我发现了一些我不明白的地方。

为什么会导致堆栈溢出

mc x | x>100 = x-10
| otherwise = mc $ mc x+11

但这不是

mc x | x>100 = x-10
| otherwise = mc $ mc (x+11)

我认为这与第一个示例中未对 x+11 进行评估有关,但并非总是评估这样的表达式

例如

Prelude> id 43+94
137

最佳答案

第一个表达式

mc $ mc x+11

被解释为

mc ((mc x) + 11)

因为函数应用优先于运算符。

第二个表达式

mc $ mc (x+11)

被解释为:

mc (mc (x+11))

第一个确实永远不会被评估,因为如果你写:

<b>mc x</b> | x > 100 = x-10
| otherwise = mc (<b>(mc x)</b> + 11)

然后您根据 mc x 定义 mc x。除非该表达式中的 mc x 未被计算,否则在计算 mc x 时,您将调用 mc x,因此它将继续来电。

关于haskell - 为什么 MC Haskell 函数会导致堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58000613/

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