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