我认为它很简单,就像我大学过去的一篇论文一样,但函数是:
[(x,y) | x <- [0..2], y<-[0,x])
和输出
[(0,0),(0,0),(1,0), (1,1), (2,0), (2,2)]
(2,0) 让我感到困惑,如果 y 映射到 0 到 x,而 x 等于 1 = (1,1) 会不会
[(0,0),(0,0),(1,0), (1,1), **(2,1)**, (2,2)]
还是因为 y 使用其列表中的所有数字 [0,1],它恢复为 0?
情况
案例
[(x,y) | x <- [0..2], y<-[0,x]]
[0,x]
是:
-
[0,0]
x=0
-
[0,1]
x=1
-
[0,2]
x=2
因此,如果您将每一种y
与相应的x
配对,您将获得:
[(0,0),(0,0)] -- x = 0
++ [(1,0),(1,1)] -- x = 1
++ [(2,0),(2,2)] -- x = 2
产生您给定的输出
注意:[0,2]
的长度为 2,与长度为 3 且包含 1
的 [0..2]
完全不同
案例[(x,y) | x <- [0..2], y<-[0..x]]
这没有什么不同 - [0..x]
是:
-
x=0
[0]
-
[0,1]
x=1
-
[0,1,2]
x=2
如果你把这些y
中的每一个都与相应的x
配对,你会得到
[(0,0))] -- x = 0
++ [(1,0),(1,1)] -- x = 1
++ [(2,0),(2,1),(2,2)] -- x = 2
然后给你结果
[(0,0),(1,0),(1,1),(2,0),(2,1),(2,2)]