我在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,但我没有得到它是如何工作的...... 谢谢你的帮助!!!
答案 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)]