Haskell列表理解不起作用

时间:2016-12-21 16:02:22

标签: haskell list-comprehension

这是我在Haskell中所做的列表理解:

[x|x <- [1..], n <- [1..], n <= 10, n >= 1, x == ((7 * n) + 4)]

我希望它打印出4个mod 7的前10个自然数,但是当我执行它时,它不打印任何东西而且永远不会终止。为什么呢?

1 个答案:

答案 0 :(得分:5)

编译器不会推断n <- [1..10]等同于n。代码将永远从[1..]快速提取n <= 10的值,并根据警卫n >= 1n <- [1..10]验证每个值是否应该使用n。对[x|x <- [1..], n <- takeWhile (<= 10) [1..], x == ((7 * n) + 4)] 进行进一步测试的x就足够了,但如果你想要明确,请尝试类似

的内容
n

从单独的列表中提取n并将它们与[ 7*n + 4 | n <- [1..10] ] 的函数进行比较也是低效的。您只需从brew install gnuplot 单独构建列表:

PATH