我认为它在我大学过去的论文中很简单,但功能是:
[(x,y) | x <- [0..2], y<-[0,x])
Run Code Online (Sandbox Code Playgroud)
和输出
[(0,0),(0,0),(1,0), (1,1), (2,0), (2,2)]
Run Code Online (Sandbox Code Playgroud)
(2,0)混淆了我,如果y映射到0到x而x等于1 =(1,1)则不会
[(0,0),(0,0),(1,0), (1,1), **(2,1)**, (2,2)]
Run Code Online (Sandbox Code Playgroud)
或者是因为由于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
Run Code Online (Sandbox Code Playgroud)
这会产生你给定的输出
注意:[0,2]长度为2,与[0..2]长度为3且包含的长度完全不同1
[(x,y) | x <- [0..2], y<-[0..x]]它并没有那么不同 - [0..x] 是:
[0] 对于 x=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
Run Code Online (Sandbox Code Playgroud)
然后会给你结果
[(0,0),(1,0),(1,1),(2,0),(2,1),(2,2)]
Run Code Online (Sandbox Code Playgroud)