• 日時 :2006/5/21 (Mon)
  • 場所 :名大 理学部1号館(多元数理科学研究科) 307室
  • 時刻 :18:00〜19:30
  • 参加者:13名
  • Garrigue先生がキタ
  • ocamlで不動点コンビネータ?って書けるんでしたっけ?型はどうなるんでせう?Haskellなら y f = f (y f) ですが -- けいご? 2006-05-23 (火) 10:53:09
  • let rec y f = f (y f);;です。再帰を使って不動点を定義するという妙なことになりますが、この際気にしない :) -- 小笠原? 2006-05-23 (火) 10:57:31
  • あっ、lazy 忘れてました。let rec y f = f (lazy (y f));; こうしないとスタック溢れます。すみません。 -- 小笠原? 2006-05-23 (火) 11:21:17
  • おおっなるほど〜 しかし別の所ではまってしまいました。 -- けいご? 2006-05-23 (火) 11:33:57

3章 exercise †

exercise3 (吉岡) †

#2実数の相乗平均をとる関数geo_meanを定義せよ。
let geo_mean (x,y)=sqrt(x*.y);;

exercise4 (飯田) †

#2行2列の実数行列と2要素の実数ベクトルの積をとる関数 
let prodMatVec ((a,b),(c,d)) (x,y) = ((a*.x+.b*.y),(c*.x+.d*.y));; 

exercise5 (みずの) †

(* 作り方 *)
# (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 (小笠原) †

#再帰関数の練習
#不動点コンビネーターを使ってもいいけど、それはまたの機会に
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 (山本) †

添付ファイルを参照...

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

exercise11 (けいご) †

# 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 (末次) &dagger;

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));;


添付ファイル: fileexercise9.ps 777件 [詳細]
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-09-27 (土) 20:30:24 (4409d)