【发布时间】:2013-05-13 22:40:53
【问题描述】:
primes :: [Int]
primes = sieve [2..]
sieve :: [Int] -> [Int]
sieve (p:xs)= p:sieve[x|x<-xs,x `mod` p /= 0]
f :: Int->Int
f n = head [x|x<-[0,(product (filter (<n) primes))..],x/=0,sum (map (x `mod`) [1..n]) == 0]
加载到 GHCi 并输入“f 20” 失败......请帮助我
【问题讨论】:
-
选择您的代码并按 Ctrl-K 或
{}按钮进行格式化。 -
它是如何失败的? GHCi 是怎么说的?
-
这应该是
[2..n]吗?(map (x 'mod') [1..n])1 -
使用
takeWhile而不是filter。但是由于您的列表是[Int],所以列表不是无限的,只是很长。 (并且使用可怕的算法,即使Int是 32 位,也需要很长时间才能完成。) -
@WillNess
Int、Word和IntN/WordN的Enum实例在maxBound处停止,因此没有回绕(但最终在sieve []处出现模式匹配失败)。我有点不耐烦,所以我的时间可能比你的要短;)
标签: haskell