- 日時 :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}; #comment *3章 exercize [#sa623689] ** Exercize7 (小笠原) [#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) ;; ** Exercize11 (けいご) [#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_pair n = if n = 1 then (0, 1) else let (prev, curr) = fib_pair (n-1) in (curr, curr+prev);; # 後で書く # 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));;