0
我想了解OCaml中的Y组合器。我从here获取了一些代码,我正在尝试使用它来编写Ackermann函数。在链接的例子中,这些函数只需要一个参数。 Ackermann函数需要两个参数,并且因为它而一直存在语法错误。我到目前为止的代码是如何使用ocaml中的Y组合函数调用具有多个参数的函数?
type 'a mu = Roll of ('a mu -> 'a);;
let unroll (Roll x) = x;;
let fix f = (fun x a -> f (unroll x x) a) (Roll (fun x a -> f (unroll x x) a));;
let acker f = function
0, n -> n + 1
| m, 0 -> f (m-1) 1
| m, n -> f (m-1) (f m (n-1))
;;
print_int (fix (acker 2 2));;
我需要做些什么才能使它起作用?谢谢。