- 追加された行はこの色です。
- 削除された行はこの色です。
- 日時 :2006/5/21 (Mon)
- 場所 :名大 理学部1号館(多元数理科学研究科) 307室
- 時刻 :18:00〜19:30
- 参加者:13名
- Garrigue先生がキタ
- ocamlで[[不動点コンビネータ]]って書けるんでしたっけ?型はどうなるんでせう?Haskellなら y f = f (y f) ですが -- [[けいご]] &new{2006-05-23 (火) 10:53:09};
- let rec y f = f (y f);;です。再帰を使って不動点を定義するという妙なことになりますが、この際気にしない :) -- [[小笠原]] &new{2006-05-23 (火) 10:57:31};
- あっ、lazy 忘れてました。let rec y f = f (lazy (y f));; こうしないとスタック溢れます。すみません。 -- [[小笠原]] &new{2006-05-23 (火) 11:21:17};
- おおっなるほど〜 しかし[[別の所:http://tsukimi.agusa.i.is.nagoya-u.ac.jp:16080/~sydney/ocaml/index.php?%C9%D4%C6%B0%C5%C0%A5%B3%A5%F3%A5%D3%A5%CD%A1%BC%A5%BF#lc835d08]]ではまってしまいました。 -- [[けいご]] &new{2006-05-23 (火) 11:33:57};
- dAosdkILw -- [[ulfdmw]] &new{2008-09-23 (火) 10:36:08};
- おおっなるほど〜 しかし[[別の所:http://www.itpl.co.jp/ocaml-nagoya/index.php?%C9%D4%C6%B0%C5%C0%A5%B3%A5%F3%A5%D3%A5%CD%A1%BC%A5%BF#lc835d08]]ではまってしまいました。 -- [[けいご]] &new{2006-05-23 (火) 11:33:57};
#comment
*3章 exercise [#sa623689]
** exercise3 (吉岡) [#jd1bac1a]
#2実数の相乗平均をとる関数geo_meanを定義せよ。
let geo_mean (x,y)=sqrt(x*.y);;
** exercise4 (飯田) [#yad7172f]
#2行2列の実数行列と2要素の実数ベクトルの積をとる関数
let prodMatVec ((a,b),(c,d)) (x,y) = ((a*.x+.b*.y),(c*.x+.d*.y));;
** exercise5 (みずの) [#e108fb3e]
(* 作り方 *)
# (0.1,0.2,0.3,0.4);;
- : float * float * float * float = (0.1, 0.2, 0.3, 0.4)
# ((0.1,0.2),(0.3,0.4));;
- : (float * float) * (float * float) = ((0.1, 0.2), (0.3, 0.4))
(* 取り出す *)
# let (x,_,_,_) = (0.1,0.2,0.3,0.4);;
val x : float = 0.1
# (fst (fst ((0.1,0.2),(0.3,0.4))));;
- : float = 0.1
** exercise7 (小笠原) [#jd1bac1a]
#再帰関数の練習
#不動点コンビネーターを使ってもいいけど、それはまたの機会に
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)
;;
** Exercise9 (山本) [#p242ccb6]
添付ファイルを参照...
**Excercise10 (樋口) [#t21730ae]
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
** exercise11 (けいご) [#k0e4344a]
# 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 (末次) [#p15a88be]
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));;