在OCaml函数中返回num而不是int

时间:2013-11-05 18:53:25

标签: int ocaml

我有一个尾递归因子函数,它接收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;;

2 个答案:

答案 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测试的。)