小编Dar*_*ith的帖子

模式匹配元组不是完全懒惰的吗?

我在 Haskell 中遇到了一些非常不直观的行为,我不确定它是否是 Haskell 中的错误。如果这是预期行为,具体是什么导致无限循环?

import Data.Function (fix)

main=putStrLn$show$fst$
    fix (\rec-> (\(a1,a2)->(3,7)) rec)
Run Code Online (Sandbox Code Playgroud)

无限循环,我假设是因为将 rec 模式匹配到 rec (a1,a2) 它评估。但我觉得它不应该需要,因为一切都会匹配。例如,这些都可以正常工作:

    fix (\rec-> (\a->(3,7)) rec)
    fix (\rec-> (\a->let (a1,a2)=a in (3,7)) rec)
Run Code Online (Sandbox Code Playgroud)

有趣的是这退出错误

    fix (\rec-> (\(a1,a2)->(3,7)) undefined)
Run Code Online (Sandbox Code Playgroud)

但是我可以发誓,我遇到这种行为(更复杂)的原始代码在这种情况下实际上会起作用。我可以尝试重新创建它。

haskell lazy-evaluation

3
推荐指数
1
解决办法
111
查看次数

标签 统计

haskell ×1

lazy-evaluation ×1