何かの答

問題を知らない人は問題を見たほうがよいよ: http://d.hatena.ne.jp/sumii/20090716/p1

let rec d () = d ()

let f5 : ((unit -> unit) -> unit) -> unit = fun g -> g d

let f6 : ((unit -> unit) -> unit) -> unit = fun g ->
  let y = ref 0 in
  let h () = y := 1 in
  g h;
  if !y = 1 then d ()

ところで、なんでこの頃、「答え」って書くんだろう。「え」がダサい。
 
 
 
C とか Javascript っぽく書かれると、なんか異様に難しく思えたけど、ML にしたらそうでもなかったのはやっぱり私が変な人だから?
 
 
 
いや、そうじゃなくて、使用する言語仕様の性質が思考に影響を与えているんだな。難読化ついでにGolfしてみた。
 
 
 
そろそろ答を書くよ。Golfで難読化してあります。
 
 
 

let c x f=f(fun f->x:=f);!x()in c(ref(fun _->()))