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

タイプint -> numが必要な場合は、適切な場所で変換する必要があります。大きな階乗を計算したい場合、aux関数は でなければなりませんnum -> int -> num

これを行う 1 つの方法を次に示します。

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 に答える