我刚试过这个:
Prelude> [x*2|x<-[1..10]]
[2,4,6,8,10,12,14,16,18,20]
好吧看起来不像F#&#34; seq&#34;这是懒惰的评价。这里的所有元素都打印出来了,所以看起来像#34; list comprehension&#34;是热切的评价。
如果我希望建立一个&#34;懒惰的评估&#34;一? 感谢。
答案 0 :(得分:11)
在Haskell 一切(好吧差不多)是懒惰的,这没什么区别
但是如果你要求GHCi打印它(你输入的话)它将评估所有这些
要看到它使用它:
Prelude> let xs = [x*2|x<-[1..10]]
Prelude> :sprint xs
xs = _
_
表示未评估的 thunk
BTW:这就是为什么Haskell没有这样的问题:
let xs = [x*2|x<-[1..]]
这是一个无限的列表 - 现在如果你要求它打印出来它会需要一些时间;)
F#的seq { ... }
也是如此,但F#的名单却不是这样!
答案 1 :(得分:4)
您可以通过询问无限列表来自行测试:
Prelude> take 10 [ x*2 | x <- [1..], x `mod` 3 == 0 ]
[6,12,18,24,30,36,42,48,54,60]