bas*_*354 2 haskell list-comprehension filter
我有这个列表理解:
[(x,y)| x<-[1..2], y<-[x..3], let z = x+y, odd z]
Run Code Online (Sandbox Code Playgroud)
非常感谢!
您正在生成元组,其中元素的总和必须是奇数。该行:
let z = x+y, odd z
Run Code Online (Sandbox Code Playgroud)
z
为 sum指定名称x + y
,然后将该值与谓词一起使用odd
来测试总和是否实际上是奇数。x
和的组合y
,其odd z
计算结果为True
进入结果列表,其他的被删除。
请注意,集合的最低值y
是变量的实际值x
:
x <- [1..2]
y <- [x..3]
Run Code Online (Sandbox Code Playgroud)
这是为了从考虑中删除一些“重复项”( (2,1)
)。
所以x从1到2,y从x到3.
所以对于第一个:
x = 1
y = 1
z = 1 + 1 = 2
Run Code Online (Sandbox Code Playgroud)
z并不奇怪,因此,它不会被添加.然后:
x = 1
y = 2
z = 1 + 2 = 3
Run Code Online (Sandbox Code Playgroud)
z现在是奇数,所以它被添加了.然后:
x = 1
y = 3
z = 1 + 3 = 4
Run Code Online (Sandbox Code Playgroud)
z是偶数,不添加ergo.然后:
x = 2
y = 2
z = 2 + 2 = 4
Run Code Online (Sandbox Code Playgroud)
z是偶数.
然后:
x = 2
y = 3
z = 2 + 3 = 5
Run Code Online (Sandbox Code Playgroud)
z是5,奇数,因此添加.