- 日時 :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};
- おおっなるほど〜 しかし[[別の所: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};

*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));;
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS