gpt4 book ai didi

haskell - Haskell thunk 在评估方面是否可变?

转载 作者:行者123 更新时间:2023-12-02 16:05:34 24 4
gpt4 key购买 nike

在研究并行编程以及随后的评估策略时,出现了 thunk 是否可变的问题。举个例子,假设我有以下代码:

foo = 1 + 2         -- Thunk
bar = foo `seq` foo -- Evaluates foo

在计算 bar 时调用 seq 计算 foo,为 bar 提供正常形式值 3。此评估也会影响 foo 吗?也就是说,在评估 bar 后,foo 的值仍然是 1+2 还是 3 ? p>

最佳答案

Haskell 报告仅指定求值顺序为 "non-strict" ,因此任何一种行为都符合标准。

但是,使用lazy ( "call by need" ) 评估,涉及以一种使 thunk “可变”的方式共享值,如您所描述的,提供了对 "call by name" 的渐近改进。 (即不共享)。

因此,在 GHC(可能还有大多数其他合理的实现)中,第一次强制执行后,foo 将变为 3。但是,标准并未强制要求这一点,您应该记住这一点。

关于haskell - Haskell thunk 在评估方面是否可变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11094242/

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