今天我们学习了在 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)

10-08 14:14