練習問題 4.2
次の関数 repeat は twice、fourtimes などを一般化したもので、f を n 回、x に適用する関数です。
let rec repeat f n x =
if n > 0 then repeat f (n-1) (f x) else x;;
val repeat : (‘a -> ‘a) -> int -> ‘a -> ‘a = <fun>
これを使って、フィボナッチ数を計算する関数 fib を定義しなさい(以下の … の部分を埋めなさい)。
let fib n =
let (fibn, _) = …
in fibn;;
(* 練習問題 4.2 *)
(* フィボナッチ数列を計算する関数 fib を定義せよ。 *)
let rec repeat f n x =
if n > 0
then repeat f (n-1) (f x)
else x;;
let twice x = x * 2;;
let test1 = repeat twice 5 2 = 64;;
let fib n =
let (fibn, _) =
repeat (fun (x, y) -> (x+y, x)) n (0, 1)
in fibn;;
(*
let rec fib n =
if n = 1 then 1
else
if n = 2 then 1
else
fib (n-2) + fib (n-1);;
*)
let test2 = fib 5 = 5;;
let test3 = fib 10 = 55;;