了解haskell中的列表理解(缺少元组)

时间:2014-08-20 13:37:50

标签: haskell list-comprehension

我在haskell中有以下列表理解

list = [(x,y)| x<-[1..2], y<-[x..3]]

作为答案,我希望以下列表:

[(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)]

但我收到了:

[(1,1),(1,2),(1,3),(2,2),(2,3)]

所以我的问题是:(2,1)发生了什么? 任何人都可以解释这个结果是如何产生的?我知道它必须与y&lt; - [x..3]进行todo,但我没有得到它是如何工作的...... 谢谢你的帮助!!!

1 个答案:

答案 0 :(得分:9)

那是因为它应该是这样的:

λ> [(x,y)| x<-[1..2], y<-[1..3]]  -- notice [1..3] instead of [x..3]
[(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)]

对于原始代码[(x,y)| x<-[1..2], y<-[x..3]],遍历将是 像这样:

在第一次迭代中,

1,y从[1..3]遍历,导致

(1,1),(1,2),(1,3)

在下一次迭代中,x为2,y从[2..3]遍历,导致

(2,2),(2,3)

给你

[(1,1),(1,2),(1,3),(2,2),(2,3)]