最小互质数方法中的常数误差

  • 本文关键字:常数 误差 方法 haskell
  • 更新时间 :
  • 英文 :


所以我是Haskell的新手,我一直在尝试实现找到最小互质数的函数。我还有另一个用于计算 GCD 的函数。

我已经尝试了各种方法来实现我的功能,但是,它们都失败了。

smallestCoPrimeOf :: Int -> Int
smallestCoPrimeOf a 
| gcd a b == 1  =  b
| otherwise     = gcd a (b+1)

或将最后两行替换为

b = 2
if (gcd a b) == 1 
then b 
else gcd a (b+1)

let b = 2
if (gcd a b) == 1  then b else gcd a (b+1)

所有这些最终都会抛出诸如"输入'|'上的解析错误"或"输入'if'上的解析错误"之类的错误。每次我谷歌一些东西并尝试纠正错误时,同样的错误都会重复出现/另一个错误出现。我的错误在哪里?

在 Haskell 中,缩进很重要。必须缩进这些行以显示哪些行从属于其他行。这就是Haskell避免使用如此多括号的原因,就像其他语言一样。这样:

smallestCoPrimeOf :: Int -> Int
smallestCoPrimeOf a 
| gcd a b == 1  =  b
| otherwise     = gcd a (b+1)

不规定缩进量,只要一致即可。

你也可以写:

smallestCoPrimeOf :: Int -> Int
smallestCoPrimeOf a =
let b = 2
in if (gcd a b) == 1
then b
else gcd a (b+1)

请注意letin如何对齐,以及if-then-else

如果您使用的是 GHCi,请记住将多行声明放在:{-:}中:

λ> :{
λ| smallestCoPrimeOf a 
λ|   | gcd a b == 1  =  b
λ|   | otherwise     = gcd a (b+1)
λ| :}

您的代码还有其他问题,但这些问题有待您发现。

最新更新