今天我们学习了在 SML 中“打结”,你有这样的事情
val tempFunc = ref (fn k:int => true);
fun even x = if x = 0 then true else !tempFunc(x-1);
fun odd x = if x = 0 then false else even(x-1);
tempFunc := odd;
我正在使用非常相似的 ocaml,但我在做同样的事情时遇到了麻烦。我发现最接近的是
let tempFunc {contents =x}=x;;
但我真的不明白,以及如何将 tempFunc 与另一个函数联系起来。任何帮助表示赞赏!
最佳答案
在 OCaml 中直接翻译您的代码是:
let tempFunc = ref (fun k -> true)
let even x = if x = 0 then true else !tempFunc (x-1)
let odd x = if x = 0 then false else even (x-1)
let () = tempFunc := odd
这样做的惯用方法(在 SML 中也是如此)是使用递归函数:
let rec even x = if x = 0 then true else odd (x-1)
and odd x = if x = 0 then false else even (x-1)