2
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 吗?

4

1 回答 1

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
于 2012-09-11T21:30:57.843 回答