以下内容摘自Haskell的主页https://www.haskell.org/
primes = filterPrime [2..]
where filterPrime (p:xs) =
p : filterPrime [x | x <- xs, x `mod` p /= 0]
在看了这个函数几分钟后,我意识到我并不真正理解这个函数实际上是在做什么,我想知道正在发生什么。
但首先,这是我认为正在发生的事情:
由于惰性求值,每次迭代只会取列表推导中的一个成员...就像这样:
第一次迭代
2 : filterPrime [x | x <- [3..], x `mod` p /= 0]
第二次迭代
2 : 3 : filterPrime [x | x <- [4..], x `mod` p /= 0]
第三次迭代
。??? :(