を受け取り、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;;
タイプ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 でテストされました。)