Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 偶数列表的哥德巴赫函数[4..n]_Haskell_Primes - Fatal编程技术网

Haskell 偶数列表的哥德巴赫函数[4..n]

Haskell 偶数列表的哥德巴赫函数[4..n],haskell,primes,Haskell,Primes,您好,我正在尝试为间隔[4..n]创建一个函数goldbach::Integer->Bool,该函数应该返回True,前提是该间隔中的所有元素都是偶数,并且可以从两个基本数求和。到目前为止,我已经做到了这一点 goldbach::Integer->Bool goldbach n |goldbach2 n == ??? = goldbach (n-2) |n==4 = True |otherwise = False goldbach2 :: Integer -&g

您好,我正在尝试为间隔
[4..n]
创建一个函数
goldbach::Integer->Bool
,该函数应该返回
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)
。我应该如何在我的第三行
goldbach2n==?=哥德巴赫(n-2)
如果
哥德巴赫2 n
的结果是正确的,并且给了我两个基本的数字?

如果我理解正确,你想要的是:

 | let (n1, n2) = goldbach2 n in n == n1 + n2   =  goldbach (n-2)

我会这样写

goldbachInterval n = all goldbach [4,6 .. n]
   where
       goldbach k = .... -- property of being a golbach number

是的,我想这是我需要的东西,但是你能告诉我应该如何使用它吗?我不能简单地用你的第三行替换我的第三行,或者我可以吗?我想你可以,尽管我还没有测试过它。让。。。in子句是条件,单个“=”是该条件的值。哦,我忘了开头的“|”。我将在中编辑它。是的,但问题是我得到了一个错误,goldbatch得到的参数很少。是的,不必介意它只需要
n
goldbatch2
之后,您的描述一定是错误的,因为唯一的限定间隔是[]和
[4..4]
,因为在所有其他间隔中至少有一个奇数。因此,您描述的内容的简短版本是
g=(我不明白这是怎么回事。如果我输入
n=8
,我应该有一个列表
[4,6,8]
,它应该返回True。是的,您实际上没有在代码中构造间隔
[4..n]
。在描述中,您真正的意思是
[4,6..n]
那么我应该如何更改它以使其正确?