- 日時 :2006/5/21 (Mon)
- 場所 :名大 理学部1号館(多元数理科学研究科) 307室
- 時刻 :18:00〜19:30
- 参加者:13名
- Garrigue先生がキタ
- ocamlで不動点コンビネータ?って書けるんでしたっけ?型はどうなるんでせう?Haskellなら y f = f (y f) ですが -- けいご?
- let rec y f = f (y f);;です。再帰を使って不動点を定義するという妙なことになりますが、この際気にしない -- 小笠原?
- あっ、lazy 忘れてました。let rec y f = f (lazy (y f));; こうしないとスタック溢れます。すみません。 -- 小笠原?
- おおっなるほど〜 しかし別の所ではまってしまいました。 -- けいご?
#2実数の相乗平均をとる関数geo_meanを定義せよ。
let geo_mean (x,y)=sqrt(x*.y);;
#再帰関数の練習
#不動点コンビネーターを使ってもいいけど、それはまたの機会に
let rec pow (x, n) =
if n = 0 then 1.0
else x *. pow (x, n - 1)
;;
let rec pow' (x, n) =
match n with
0 -> 1.0
| n when n mod 2 = 0 -> pow' (x *. x, n / 2)
| n -> x *. pow' (x, n - 1)
;;
Excercise10 (樋口) †
fib 4
-> if 4 =1 || 4 = 2 then 1 else fib(4-1)+fib(4-2)
-> fib(3) + fib(2)
-> (if 3 =1 || 3 = 2 then 1 else fib(3-1)+fib(3-2)) + fib(2)
-> ( fib(2) + fib(1) ) + fib(2)
-> ( (if 2 = 1 || 2=2 then 1 else fib(2-1)+fib(2-2)) + fib(1) ) + fib(2)
-> (1 + fib(1) ) + fib(2)
-> (1 + (if 1 = 1 || 1 = 2 then 1 else fib(1-1)+fib(1-2)) ) + fib(2)
-> (1+1) + fib(2)
-> 2 + fib(2)
-> 2 + (if 2 = 1 || 2 = 2 then 1 else fib(2-1)+fib(2-2))
-> 2 + 1
-> 3
Exercize11 (けいご) †
# Exercise 11 担当:今井(け)
# 1.
let rec gcd m = function
0 -> m
| n -> gcd n (m mod n)
;;
# 落とし穴
# let gcd m = function 0 -> 0;;
# などと遊んだ後,
# let gcd m = function
# 0 -> m
# | n -> gcd n (m mod n)
# ;;
# と,recが欠けた定義をしたら,おかしなことになった
# 2.
# nCr = n!/r!(n-r)!
let rec comb n r =
let rec fac = function
0 -> 1
| n -> n * fac (n-1)
in
fac n / ((fac r) * (fac (n-r)))
;;
# 3.
# let rec fib_iter n (prev, curr) =
if n = 1 then curr
else fib_iter (n-1) (curr, prev+curr);;
val fib_iter : int -> int * int -> int = <fun>
# let fib n = fib_iter n (0, 1);;
val fib : int -> int = <fun>
# fib 1;;
- : int = 1
# fib 2;;
- : int = 1
# fib 3;;
- : int = 2
# fib 4;;
- : int = 3
# fib 5;;
- : int = 5
# fib 6;;
- : int = 8
# 4. はやってない
Exercise 12 (末次) †
let rec pos n =
if n < 0 then 0.0
else pos (n - 1) +. 1.0 /. (float_of_int (4 * n + 1)) -. 1.0 /. (float_of_int (4 * n + 3));;