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 不同的公式取决于它是否';是奇数还是偶数_Haskell - Fatal编程技术网

Haskell 不同的公式取决于它是否';是奇数还是偶数

Haskell 不同的公式取决于它是否';是奇数还是偶数,haskell,Haskell,我正试图在Haskell中创建一个不需要n^k的代码 = (n) * n) ^(k/2)当k是偶数时,n^k = N * (n^(k)−1) )如果k是奇数。 我做错了什么,但我不知道怎么解决它 power2 :: Integer -> Integer -> Integer power2 n 0 = 1 power2 n k | k < 0 = error "negative argument" | k `mod` 2 == 0 = even

我正试图在Haskell中创建一个不需要n^k的代码 = (n) * n) ^(k/2)当k是偶数时,n^k = N * (n^(k)−1) )如果k是奇数。 我做错了什么,但我不知道怎么解决它

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0 = error "negative argument"
   | k `mod` 2 == 0 = even            -- Am I supposed to write  = even here?
   | otherwise = odd
if k even = (n 2) ( div k 2)       -- (n^2)^(k/2)  ???
if k odd = n * (n) (k-1))          -- Is this n^(k-1) ???
power2::Integer->Integer->Integer
power2 n 0=1
power2 n k
|k<0=错误“负参数”
|k`mod`2==0=偶数--我应该在这里写=偶数吗?
|否则=奇数
如果k偶数=(n2)(第k2部分)-(n2)^(k/2)???
如果k奇数=n*(n)(k-1))--这是n^(k-1)吗???

偶数
奇数
是Haskell中的函数,您可以在条件中直接使用它们来测试数字是否为偶数/奇数

以下是一种选择:

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0  = error "negative argument"
   | even k = power2 (n * n) (div k 2)
   | odd  k = n * ( power2 n (k-1) )
power2::Integer->Integer->Integer
power2 n 0=1
power2 n k
|k<0=错误“负参数”
|偶数k=power2(n*n)(第k2部分)
|奇数k=n*(幂2 n(k-1))

编辑:

当然,您可以编写自己版本的偶数/奇数函数,并将其用作替代

例如:

myEven :: Integer -> Bool
myEven n = n `mod` 2 == 0

myOdd :: Integer -> Bool
myOdd n = n `mod` 2 == 1

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0  = error "negative argument"
   | myEven k = power2 (n * n) (div k 2)
   | myOdd  k = n * ( power2 n (k-1) )
myEven::Integer->Bool
myEven n=n`mod`2==0
myOdd::Integer->Bool
myOdd n=n`mod`2==1
power2::整数->整数->整数
power2 n 0=1
power2 n k
|k<0=错误“负参数”
|myEven k=power2(n*n)(第K2部分)
|myOdd k=n*(幂2 n(k-1))

偶数
奇数
是Haskell中的函数,您可以在条件中直接使用它们来测试数字是否为偶数/奇数

以下是一种选择:

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0  = error "negative argument"
   | even k = power2 (n * n) (div k 2)
   | odd  k = n * ( power2 n (k-1) )
power2::Integer->Integer->Integer
power2 n 0=1
power2 n k
|k<0=错误“负参数”
|偶数k=power2(n*n)(第k2部分)
|奇数k=n*(幂2 n(k-1))

编辑:

当然,您可以编写自己版本的偶数/奇数函数,并将其用作替代

例如:

myEven :: Integer -> Bool
myEven n = n `mod` 2 == 0

myOdd :: Integer -> Bool
myOdd n = n `mod` 2 == 1

power2 :: Integer -> Integer -> Integer 
power2 n 0 = 1
power2 n k
   | k < 0  = error "negative argument"
   | myEven k = power2 (n * n) (div k 2)
   | myOdd  k = n * ( power2 n (k-1) )
myEven::Integer->Bool
myEven n=n`mod`2==0
myOdd::Integer->Bool
myOdd n=n`mod`2==1
power2::整数->整数->整数
power2 n 0=1
power2 n k
|k<0=错误“负参数”
|myEven k=power2(n*n)(第K2部分)
|myOdd k=n*(幂2 n(k-1))

如果k偶数
和同样的
如果k奇数
没有意义并且不会编译,我认为您需要
其中偶数=…
。此外,GHCi将允许您在提供反馈的同时以交互方式处理错误。用它来测试你的评论。现在,我们有一个比
Integer
更好的指数类型。导入<代码>数值。自然并使用
power2::Integer->Natural->Integer
。那么你就不必担心指数是负数,因为它不可能是负数。
Numeric.Natural
只是隐藏了运行时错误
power2 3(-5)
仍然会进行打字检查。
如果k偶数
和同样的
如果k奇数
没有意义并且不会编译,我认为您需要
其中偶数=…
。此外,GHCi将允许您在提供反馈的同时以交互方式处理错误。用它来测试你的评论。现在,我们有一个比
Integer
更好的指数类型。导入<代码>数值。自然并使用
power2::Integer->Natural->Integer
。那么你就不必担心指数是负数,因为它不可能是负数。
Numeric.Natural
只是隐藏了运行时错误<代码>power2 3(-5)仍将进行打字检查。使用
|……=True |否则=False
通常被认为是拙劣的风格。你已经有了真理的价值:用它吧!同样,您应该使用
而不是
来翻转它们,而不是使用防护装置。我已经按照惯例编辑了你的答案。@dfeuer:我是想让这个例子对新来者来说更具可读性和易懂性。在真实场景中,不需要替换标准的
偶数
奇数
函数。不管怎样,谢谢你的意见。使用
|..=True |否则=False
通常被认为是拙劣的风格。你已经有了真理的价值:用它吧!同样,您应该使用
而不是
来翻转它们,而不是使用防护装置。我已经按照惯例编辑了你的答案。@dfeuer:我是想让这个例子对新来者来说更具可读性和易懂性。在真实场景中,不需要替换标准的
偶数
奇数
函数。无论如何,谢谢你的意见。