如何将函数调用的值存储到变量

max*_*424 2 haskell

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

例如,如果我调用该函数与数字7其递归所以n变得6然后5等等所以我不能gdc正确; 例如1-7然后2 - 7然后3 -7。您知道如何存储nto 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)
Run Code Online (Sandbox Code Playgroud)

Jos*_*ica 7

使用辅助函数(通常称为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)
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,当需要额外的变量名或参数时,使用“内部”`go` 函数是在 Haskell 中进行任何递归的标准方法。 (2认同)