我认为它在我大学过去的论文中很简单,但功能是:
[(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?
答案 0 :(得分:7)
[(x,y) | x <- [0..2], y<-[0,x]]
[0,x]
是:
[0,0]
x=0
{li> [0,1]
x=1
{li> [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且包含[0..2]
1
完全不同
[(x,y) | x <- [0..2], y<-[0..x]]
它并没有那么不同 - [0..x]
是:
[0]
x=0
{li> [0,1]
x=1
{li> [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)]