我是Haskell的新手,我在调试时遇到了烦人的行为。
当我重新运行main时,断点不再出现,但断点未被删除,因为:show breaks列出它。谁知道发生了什么?
我在Ubuntu 11.10,64位上。我明天会在不同的环境中测试它。
由于
答案 0 :(得分:2)
在没有看到代码的情况下很难知道,但听起来很可能在第二次运行时断点从未到达,因为结果是由于懒惰的评估而缓存的。它可能是第一次THUNK(暂停评估),第二次它已被评估。
答案 1 :(得分:0)
为避免重新计算,常量应用程序表单将替换为其redex的间接。
例如,下面的代码片段'papperlap'的右侧将被替换为指向'4'的间接节点。
bla x = x + 1
papperlap = bla 3
如果你在'bla'上设置断点并要求'papperlap'两次,你会发现'bla'只应用一次。但如果你两次要求'bla 3',我们也会停两次:
*Main> :break bla
Breakpoint 0 activated at meerbla.hs:1:1-13
*Main> papperlap
Stopped at meerbla.hs:1:1-13
_result :: a = _
[meerbla.hs:1:1-13] *Main> :continue
4
*Main> papperlap
4
*Main> bla 3
Stopped at meerbla.hs:1:1-13
_result :: a = _
[meerbla.hs:1:1-13] *Main> :continue
4
*Main> bla 3
Stopped at meerbla.hs:1:1-13
_result :: a = _
[meerbla.hs:1:1-13] *Main> :continue
4