【发布时间】:2016-06-18 18:48:52
【问题描述】:
学习 Haskell。尝试编写一个名为nextPrime n 的函数,该函数将返回n 之后的下一个素数。
我有以下:
-- Generate a list of all factors of n
factors :: Integral a => a -> [a]
factors n = [x | x <- [1..n], n `mod` x == 0]
-- True iff n is prime
isPrime :: Integral a => a -> Bool
isPrime n = factors n == [1, n]
到目前为止,功能设置如下:
nextPrime :: Integral a => a -> a
nextPrime n =
我想我可能必须做一个 while 循环,但不确定如何做。我对函数式编程完全陌生。任何帮助表示赞赏
【问题讨论】:
-
find 也是一个选项^^
-
如果这是家庭作业,您应该尝试使用递归。作业的第一步应该是清楚地考虑你要做什么并声明性地说明它:“如果 n isPrime,n 之后的下一个素数是 n,否则它是 n+1 之后的下一个素数”(这可能是也可能是不完全是您所说的“n 之后的下一个素数”)。第二步是翻译成haskell,这涉及到学习一些基本语法(提示:“is”变成
=)。有关资源,请参阅 SO 上 haskell 标记的信息部分。 -
我理解它的方式 n 之后 意味着
nextPrime n > n在任何情况下都是nextPrime n = n+1 IIF n+1 is prime -
@jberryman "nextPrime after n is n if n isPrime" n 绝对不在 n 之后,n 之后的 nextPrime 应始终以 n + 1 开始搜索。
标签: haskell