演習問題がある章はこれでおしまい。
Exercise 1
問題
Exercise1 ref 型の値の表示を見て気づいている人もいるかもしれないが,ref 型は 以下のように定義された1フィールドの更新可能なレコードである.
type 'a ref = { mutable contents : 'a };;
自分の答え
type 'a ref = { mutable contents : 'a };; let ref' x = { contents = x };; let ex x = x.contents;; let subst x y = x.contents <- y;;
Exercise 2
問題
Exercise2 与えられた参照の指す先の整数を1増やす関数 incr を定義せよ.
自分の答え
let incr x = x := (!x + 1);;
Exercise 3
問題
Exercise3 以下で定義する funny_fact は再帰的定義(rec)を使わずに階乗を計算している. どのような仕組みで実現されているか説明せよ.
自分の答え
let f = ref (fun y -> y+1) let funny_fact x = if x = 1 then 1 else x * (!f (x-1)) ;; f := funny_fact;; (* f = ref funny_fact となっているので !f = funny_fact *) funny_fact 5;;