【发布时间】:2019-10-11 10:53:51
【问题描述】:
所以我是 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'上的解析错误”。每次我用谷歌搜索某些东西并尝试纠正错误时,都会重复相同的错误/出现另一个错误。我的错在哪里?
【问题讨论】:
-
您是在 GHCi 中运行它还是在文件中编写它?请记住,Haskell 源代码和 GHCi 的工作方式不同。
-
我不确定您的
ifs 是如何格式化的,因为看起来格式在问题中丢失了(您可以将 edit 重新输入),但那些|行需要缩进到“内部”smallestCoPrimeOf。所以在每个之前放置一个或多个空格。这将导致您出现更相关的非解析错误:) -
我已经尝试过解析,它仍然会抛出相同的错误。是的,我正在把它写在一个文件中。
-
如何将图片粘贴到某处以便更清晰?
-
不要粘贴图片。所以政策反对它。如果需要,请复制并粘贴错误 text:大多数文本界面都允许您这样做。更多关于这里的问题:要解决这个任务,如果你定义一个(递归)函数
smallestCoPrimeOfFrom a b,它会找到第一个互质数>=b。一旦你这样做了,你就可以拥有smallestCoPrimeOf a = smallestCoPrimeOfFrom a 2并完成你的任务。
标签: haskell