红框里的类型信息为什么不是:'a -> 'a -> 'a -> 'a -> 'a
?
我认为所有参数和返回值都应该是同一类型,并且 utop 确实确认它们都是同一Z.t
类型。
utop # let rec fib_acc = fun n -> fun n_1 -> fun n_2 -> fun acc ->
if (Z.equal n Z.one) || (Z.equal n (Z.of_int 2))
then acc
else fib_acc (Z.add n Z.minus_one) n_2 (Z.add n_1 n_2) (Z.add n_1 n_2);;
val fib_acc : Z.t -> Z.t -> Z.t -> Z.t -> Z.t = <fun>