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 吗?
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 吗?
如果您的函数包含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