【发布时间】:2013-12-22 00:31:33
【问题描述】:
我在 Haskell 中有一个 sieve 的递归定义,用于计算素数。但我不知道如何使用 map 或 filter 等高阶函数编写相同的函数。谁能给我看看?
sieve [] = []
sieve (x:xs) = check (x:xs)
check [] = []
check (x:xs)
|x/=2 && x/=3 && x/=5 && x/=7 = comp (x:xs)
|otherwise = x : sieve xs
comp [] = []
comp (x:xs)
|x `mod` 2 == 0 = sieve xs
|x `mod` 3 == 0 = sieve xs
|x `mod` 5 == 0 = sieve xs
|x `mod` 7 == 0 = sieve xs
|otherwise = x : sieve xs
【问题讨论】:
标签: haskell primes higher-order-functions map-function sieve