有没有办法在SML中保持递归函数的变量值?

时间:2012-09-11 21:20:18

标签: sml

fun temp(x) = 
let val a = x
in if a mod (x-1) = 0 then x
   else temp(x-1)
end;

这是示例标准ML代码。

我想知道的是 例如用户调用temp(10);然后a = 10并且调用temp(x-1)。

然后变量'a'将变为9.我可以将它保持为标准ML中的10吗?

1 个答案:

答案 0 :(得分:3)

如果您的函数包含val a = x,则对于temp(x)的任何调用,a的值将等于x的值。如果你想要记住前一个调用时a的值,你需要将它作为参数传递给它:

fun temp_helper x a =
  if a mod (x-1) = 0 then x
  else temp_helper (x-1)

fun temp x = temp_helper x x

您还可以将辅助函数作为内部函数。如果你这样做,你实际上可以删除a作为参数,而是关闭a,如下所示:

fun temp x =
let
  val a = x
  fun helper x =
    if a mod (x-1) = 0 then x
    else helper (x-1)
in
  helper x
end