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