1

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

2 回答 2

1

由于 aux 函数已经存在int -> int并且您不需要修改它,那么您只需要修改返回值:

in num_of_int (aux 1 n);;
于 2013-11-05T18:56:14.877 回答
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 测试的。)

于 2013-11-05T19:36:45.380 回答