我有一个尾递归因子函数,它接收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;;
答案 0 :(得分:1)
由于aux函数已经是int -> int
而你不需要修改它,你只需要修改返回值:
in num_of_int (aux 1 n);;
答案 1 :(得分:1)
如果您想要输入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测试的。)