我是Haskell的新手,并试图了解一些事情.如果我执行以下操作,我会收到一个问题:
list1 = [1..]
list2 = [x | x <- list1, x <= 4]
print list2
Run Code Online (Sandbox Code Playgroud)
返回[1,2,3,4.它上面没有末端括号,因此就好像列表正在加载或冻结.以下是它的外观:
Prelude> print list2
[1,2,3,4
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
你知道列表是单调递增的,但Haskell没有.使用takeWhile而不是列表解析,以便list1在找到大于4的值后停止评估.
> list1 = [1..]
> list2 = takeWhile (<= 4) list1
> print list2
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)