*予定のみ [#uf2a469d] -- - 日時 :2006/6/12 (Mon) - 場所 :名大 理学部1号館(多元数理科学研究科) 307室 - 時刻 :18:00〜19:30 - 参加者:??名 - 話題 : -- hoge -- foo -- bar #comment ---- #contents * 5章 Exercise 続き [#e8ab579a] **Exercise 6. けいご [#k186bd76] **Exercise 7. みずの [#a2b0a0db] (* fromからtoまでの数列を生成 *) let rec range from_value to_value = if from_value > to_value then [] else from_value::(range (from_value + 1) to_value);; (* 整数版sqrt *) let sqrt_int x = int_of_float (sqrt (float_of_int x));; let f r x xs= let y = sqrt_int(r - x*x) in if x > y && (x*x + y*y = r) then (x,y)::xs else xs;; let squares r = List.fold_right (f r) (range 0 (sqrt_int r)) [];; * 6章 Exercise [#j2d045ed] **Exercise 2(樋口) [#vfa96a64] nat上で int_of_nat, mul, monus を定義せよ 参考 nat の定義 type nat = Zero | OneMoreThan of nat ;; let rec int_of_nat = function Zero -> 0 | OneMoreThan n -> 1 + int_of_nat n;; let rec add m n = match m with Zero -> n | OneMoreThan m' -> OneMoreThan (add m' n);; が定義されているとして let rec mul m n = match m with Zero -> Zero | OneMoreThan Zero -> n | OneMoreThan m' -> add n (mul m' n);; let rec monus m n = match m with Zero -> Zero | OneMoreThan m' -> match n with Zero -> OneMoreThan m' | OneMoreThan n' -> monus m' n';; **Exercise 3(末次) [#pb712e62] let rec minus m n = match (m, n) with (m, Zero) -> Some m | (Zero, _) -> None | (OneMoreThan k, OneMoreThan l) -> minus k l;; **Exercise 5(下村) [#s9e70b19] (* inord *) let rec inord t l = match t with Lf -> l | Br(x,left,right) -> (inord left (x :: inord right l));; (* postord *) let rec postord t l = match t with Lf -> l | Br(x,left,right) -> (postord left (postord right (x::l)));;