- 日時 :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));; こうしないとスタック溢れます。すみません。 -- 小笠原?
- おおっなるほど〜 しかし別の所ではまってしまいました。 -- けいご?
#再帰関数の練習
#不動点コンビネーターを使ってもいいけど、それはまたの機会に
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)
;;
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_pair n =
if n = 1 then (0, 1)
else
let (prev, curr) = fib_pair (n-1) in (curr, curr+prev);;
# 後で書く
# 4. はやってない