Я пытаюсь понять комбинатор Y в OCaml. Я взял код от here, и я пытаюсь использовать его для записи функции Ackermann. В примерах в ссылке функции требуют только одного аргумента. Функция Ackermann требует двух аргументов, и из-за этого у меня остаются синтаксические ошибки. Код, который у меня есть до сих пор:Как вызвать функцию с несколькими аргументами, используя комбинатор Y в ocaml?
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));;
Что нужно сделать, чтобы заставить его работать? Благодарю.