【发布时间】:2016-12-04 10:32:41
【问题描述】:
您好,我正在尝试为区间 [4..n] 创建一个函数 goldbach :: Integer -> Bool,仅当该区间中的所有元素都是偶数并且可以从两个 prim 数字求和时,它才应该返回 True。到目前为止,我已经做到了。
goldbach::Integer->Bool
goldbach n
|goldbach2 n == ??? = goldbach (n-2)
|n==4 = True
|otherwise = False
goldbach2 :: Integer -> (Integer, Integer)
goldbach2 a = head $
filter (\(x,y) -> isPrime x && isPrime y) $
map (\e -> (e, a - e)) [3,5..a `div` 2]
where
factors a = filter (isFactor a) [2..a-1]
isFactor a b = a `mod` b == 0
isPrime a = null $ factors a
函数golbach2 结果看起来像这样goldbac2 28 = (5, 23)。如果goldbach2 n 的结果是正确的并且给了我两个原始数字,我应该如何检查我的第三行goldbach2 n == ??? = goldbach (n-2)?
【问题讨论】:
-
您的描述一定是错误的,因为,唯一的限定区间是 [] 和
[4..4],因为在所有其他区间中至少有一个奇数。因此,您所描述的简短版本是g = (<=4) -
我不明白这怎么可能。如果我输入
n=8我应该有一个列表[4,6,8]它应该返回 True。 -
是的,您实际上并没有在代码中构造区间
[4..n]。在描述中,你真正的意思是[4,6 .. n] -
那么我应该如何更改它以使其正确?