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吗?
答案 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