我在ghci中输入以下内容,认为会发生以下两种情况之一:1)解释器会挂起,搜索无限列表中的每个成员以匹配谓词; 或者2)通过幕后的Haskell jujitsu,解释器会以某种方式弄清楚序列终止于4并停在那里.
[x | x <- [1..],5>x]
Run Code Online (Sandbox Code Playgroud)
结果1是发生了什么.现在,结果2有很多要求.但是既然人类可以证明序列终止于4,那么可能有办法让翻译来做吗?这可以以它终止的方式重写吗?事实上,有过一个谓语,这使得有限的理解出无限的名单?
可能重复:
对无限列表的有限理解
我无法理解为什么ghci无法正确计算此代码?
[x | x <- [1..], x < 1000]
Run Code Online (Sandbox Code Playgroud)
Ghci只是停在最后一个号码,我需要在命令行中断这个过程以恢复正常状态.怎么了?我希望这段代码可以工作,因为haskell的懒惰评估.
haskell ×2