【发布时间】:2016-12-22 00:09:34
【问题描述】:
这是我在 Haskell 中所做的列表理解:
[x|x <- [1..], n <- [1..], n <= 10, n >= 1, x == ((7 * n) + 4)]
我希望它打印出 4 mod 7 的前 10 个自然数,但是当我执行它时,它不会打印出任何东西并且永远不会终止。为什么?
【问题讨论】:
-
如果
x和n都无限增长,它怎么会终止? -
你知道
n是从单调递增的列表中提取的,但编译器不知道。 -
Vincent:这就是为什么我有 n 的上限和下限。
-
编译器必须检查
n的每一个潜在值,以确保这些界限成立。仅仅因为它发现n的一个 值大于10 并不意味着下一个可能不是。 -
如果删除
x ==子句会打印什么?为什么?
标签: haskell list-comprehension