【问题标题】:Explanation of specific list comprehension in HaskellHaskell中特定列表理解的解释
【发布时间】:2015-07-15 18:19:19
【问题描述】:

我有一个关于列表理解的问题

[(x,y)| x<-[1..2], y<-[x..3], let z = x+y, odd z]

为什么这会评估为:

[(1,2),(2,3)]

?

z 去哪儿了?

谢谢

【问题讨论】:

  • [(x,y)| x&lt;-[1..2], y&lt;-[x..3]] 计算结果不同。试试看。。
  • z 用于谓词odd z,因此这只会返回总和为奇数的对。
  • 但是 2 并不奇怪...我需要更多解释。脑袋疼^^
  • zxy 的总和,即对中两个元素的总和。 1+2 是奇数,2+3 也是奇数。
  • 啊,现在我明白了。 (1,1) 否, (1,2) 是, (1,3) 否, (2,2) 否, (2,3) 是导致 [(1,2),(2,3)]谢谢

标签: haskell list-comprehension evaluation


【解决方案1】:

您的谓词是“z = x + y 对于所有 z 奇数”。如果您“展开”流程:

z = 谓词,而 y(x) 则为:

x = 1,2
y (1) = 1,2,3
y (2) = 2,3

基于谓词过滤的值的组合:

x+y <= filter(z)

1+1 = 2 NO
1+2 = 3 OK
1+3 = 4 NO

2+2 = 4 NO
2+3 = 5 OK

所以好的答案是 x = 1 和 y = 2 和 x = 2 和 y =3 => [(1,2), (2,3)]

【讨论】:

  • 是的,知道了。感谢您的努力!
猜你喜欢
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多