プログラミング in OCaml 4th chapter 練習問題を解いた
練習問題 4.1
let uncurry f (x, y) = f x y;;
練習問題 4.2
let rec repeat f n x = if n > 0 then repeat f (n - 1) (f x) else x;; let fib n = let (fibn, _) = repeat (fun (f, s) -> (s, f + s)) n (0, 1) in fibn;;
練習問題 4.3
let rec funny f n = if n = 0 then id else if n mod 2 = 0 then funny (f $ f) (n / 2) else (funny f (n - 1)) $ f;;
nの数だけ fを関数合成させる動きをしてるっぽい、証明はめんどいからパス
練習問題 4.4
(* s k k 1 -> k 1 (k 1) -> k 1 (<fun>) -> 1 *)
練習問題 4.5
パス
練習問題 4.6
let k x y = x;; let s x y z = x z (y z);; let cdr x y = k (s k k) x y;;