【发布时间】:2015-01-27 16:01:59
【问题描述】:
我是 Haskell 编程的新手,无法理解以下列表理解如何扩展。
primes = sieve [2..]
sieve (p:xs) = p : sieve [x | x <-xs, x `mod` p /= 0]
谁能纠正我sieve 扩展的工作原理:
- 当我们在
sieve中进行模式匹配时,p将关联到来自[3..]的2和xs。 - 接下来,在列表推导中
x<-3,但是在没有短路的情况下,我们如何仅使用3调用筛子。
我不明白的另一件事是递归在这里是如何工作的。
我认为如果可以一次将上述步骤扩展为前几个数字,例如直到5,那将是很清楚的。
【问题讨论】:
-
不,它不是重复的,请再次阅读我的问题
-
如果你在一个函数中内联所有内容并将列表理解中的守卫翻译为
filter。
标签: haskell recursion list-comprehension primes sieve