【发布时间】:2014-12-07 02:10:10
【问题描述】:
我正在使用递归做一个简单的 Haskell 函数。目前,这似乎可行,但如果我输入2,它实际上是假的,这很烦人。我不认为代码尽可能好,所以,如果你有任何建议,那也很酷!
我对这门语言还很陌生!
编辑:好的,所以我明白什么是质数了。
例如,我希望能够检查 2、3、5、7 等,并让 isPrime 返回 true。当然,如果我使用 1、4、6、8 等运行函数,那么它将返回 false。
所以,我的想法是,在伪代码中我需要执行以下操作:
num = 2 -> return true
num > 2 && num = even -> return false
在那之后,我很难将它写在任何工作代码中,所以下面的代码是我正在进行的工作,但我真的很讨厌 Haskell,所以我现在无处可去。
module Recursion where
isPrime :: Int -> Bool
isPrime x = if x > 2 then ((x `mod` (x-1)) /= 0) && not (isPrime (x-1)) else False
【问题讨论】:
-
问题不在于您的代码或您对 Haskell 的理解 - 问题在于您的
prime数字的定义 - 您在这里说的是:如果一个数字大于 2,则它是素数,不可整除由它的前身而它的前身不是主要的 - 所有这些都是错误的 -
也许你可以添加你试图说的 - 什么时候应该是素数?
-
我明白什么是质数,我只是在努力把它写成代码!
-
那么请将您想要的定义添加到您的问题中,我们可以在代码中回答
-
您还没有说(您认为)质数是什么,只是您知道它们是什么。请写下(用数学和文字,而不是 Haskell)你对素数的定义。 然后想一想你将如何检查一个数字是否是素数(用笔和纸)。只有这样你才应该担心将其翻译成 Haskell。