我有此功能,需要检查数字gdc[1..n]n是否为== 1,然后进行一些计算。所以我被困住了,因为我找不到将n的初始值存储到变量的方法。

例如,如果我用数字7调用该函数是递归操作,则n变为6,然后5等,因此我不能正确地gdc;例如1-7然后2 - 7然后3 -7。您知道如何将n的值存储到a变量吗?

myproduct :: Integer->Integer

myproduct 0 = 1
myproduct n
  |gcd n (n from first call)  /= 1 = myproduct (n-1)
  |otherwise = x
  where
    x = n * myproduct (n - 1)

最佳答案

使用帮助函数(通常称为go)进行递归,并在最外层调用中使用与递归调用中不同的变量名,如下所示:

myproduct :: Integer->Integer

myproduct orig_n = go orig_n
  where
    go 0 = 1
    go n
      |gcd n orig_n  /= 1 = go (n-1)
      |otherwise = x
      where
        x = n * go (n - 1)

关于haskell - 如何将函数调用的值存储到变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55133331/

10-12 13:43