我有一个尾递归阶乘函数,它接收一个int
并返回int
,但我希望它返回num
。我该怎么做?这是代码:
let fact n =
let rec aux f i =
if i = 0 then f
else aux (f*i) (i-1)
in aux 1 n;;
由于 aux 函数已经存在int -> int
并且您不需要修改它,那么您只需要修改返回值:
in num_of_int (aux 1 n);;
如果您想要类型int -> num
,则需要在适当的位置进行转换。如果你想计算大阶乘,你的aux
函数必须是num -> int -> num
.
这是执行此操作的一种方法:
let fact n =
let rec aux accum i =
if i = 0 then accum
else aux Num.(accum */ num_of_int i) (i - 1)
in
aux (Num.num_of_int 1) n
您可以通过移动范围Num.( ... )
来获得更好看的东西。
(这是用 OCaml 4.00.1 测试的。)