Haskell 列表理解中的哈斯克尔懒惰
我想取所有偶数的和,我不是正数,但我认为问题是Haskell需要检查(无限)列表的每个元素Haskell 列表理解中的哈斯克尔懒惰,haskell,range,list-comprehension,Haskell,Range,List Comprehension,我想取所有偶数的和,我不是正数,但我认为问题是Haskell需要检查(无限)列表的每个元素[1..],以确保它得到满足给定谓词的所有元素。哈斯克尔不是一个定理证明者。它不知道不可能有一个元素是的,现在看起来很明显。。。我本可以把|x==100000000放在那之后。。。我不知道我是怎么忽略了这一点的……正如我对这个问题的评论一样,这一点现在看起来很明显,我不知道我是怎么忽略了它的。你能解释一下第二段中第一个x前面的反斜杠是什么意思吗?@yannbane:这是一个lambda表达式。它生成一个匿名
[1..]
,以确保它得到满足给定谓词的所有元素。哈斯克尔不是一个定理证明者。它不知道不可能有一个元素是的,现在看起来很明显。。。我本可以把|x==100000000
放在那之后。。。我不知道我是怎么忽略了这一点的……正如我对这个问题的评论一样,这一点现在看起来很明显,我不知道我是怎么忽略了它的。你能解释一下第二段中第一个x前面的反斜杠是什么意思吗?@yannbane:这是一个lambda表达式。它生成一个匿名函数,该函数接受参数x
。
sum [x | x <- [1..], even x && x <= 1000]
sum (filter (\x -> even x && x <= 1000) [1..])
sum (takeWhile (<= 1000) $ filter even [1..])