• 日時 :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章 exercize †

Exercize7 (小笠原) †

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

Exercise 12 (末次) †

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