haskell - Haskell 中特定列表理解的解释

标签 haskell list-comprehension evaluation

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

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

为什么它的计算结果是:

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

z 要去哪里?

谢谢

最佳答案

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

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)]

关于haskell - Haskell 中特定列表理解的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438138/

相关文章:

c# - 在C#中,每次都会评估循环声明吗?

haskell - 从无限列表创建元组

haskell - 如何在Haskell中列出sum类型的所有值

c++ - 使用 LLVM-gcc 或 gcc 进行部分评估/特化

python - 如何使用列表理解从列表列表中的 "diagonal"范围创建列表?

python - 如何使用 FOR/LIST/DICTIONARY 理解(不是 SQL)来使用 Python 左外连接?

matlab - 集群质量措施

haskell - 证明自由单子(monad)的仿函数定律;我做对了吗?

c# - 对比 C# 泛型与 Haskell 参数化类型

python - 我怎么能在列表理解中重写这个 for 循环