λx. x K S K @はてな

このブログ内に記載された文章およびコードの著作権は,すべて Keisuke Nakano に帰属します.

純粋関数型言語で定義できない純粋な関数

こちらから引用.なかなか興味深いですね.

ちなみに,h5 は,例外を使うことにより,

let rec h5 g = try g (fun () -> raise Exit); h5 g with Exit -> ()
でも定義できますね. ただ,h5 g1 の計算の際に再帰の度に try が例外処理をスタックに積む所為で落ちてしまうのが気になる人は,
let rec h5 g = try g (fun () -> raise Exit); h5 g3 with Exit -> ()
とか
let h5 g = try g (fun () -> raise Exit); h4 g with Exit -> ()
とかなら満足できるかも?