let rec even n = if n = 0 then true else if n = 1 then false else odd (n-1) and odd n = if n = 0 then false else if n = 1 then true else even (n-1)
また,恒等関数 (fun x -> x) を s k k と表現したのと同様に (fun x y -> y) と同じ働きをする関数を s と k と関数適用の組合わせのみで 表現せよ.(fun や let による関数定義は使ってはならない.)
# ( (* s と k を関数適用で組み合わせた式 *) ) 1 2;; - : int = 2(ヒント: 型さえ目的のものと一致するように組み合わせればできてしまう. K の型は 'a -> 'b -> 'a である.つまり,K e の型は 必ず 'b -> < 式 e の型 > という形をしている.これと fun x y -> y の型を比べると?))
... and eval_let_rands env = function [] -> [] | e :: rest -> ref (Thawed (eval_exp env e)) :: eval_let_rands env rest |