【发布时间】:2015-11-17 23:52:09
【问题描述】:
我需要创建一个不带任何参数的函数 primes 并返回所有素数的列表。 这是我想出的代码:
isqrt = floor . sqrt . fromIntegral
primes = 2:3:(primes' 4)
primes' n =
if (all(\y-> (y < isqrt n) && ((n `mod` y) /= 0)) primes)
then
n:primes' (n+1)
else
primes` (n+1)
程序只打印 2:3: 然后停止。 由于惰性评估,这不应该起作用吗? (通过将素数作为迄今为止构建的列表,并能够查看我当前的数字是否可以被该列表中的任何数字整除,如果是,则附加它并继续递归,如果不继续下去)。
谁能指出我的错误?
【问题讨论】:
标签: haskell recursion primes lazy-evaluation