OCamlむずかしい
eval = function Funktion f -> fun cont -> cont f | Apply (rator, rand) -> fun cont -> eval rator (function D -> cont (D1 rand) | erator -> eval rand (fun erand -> apply erator erand cont))
なにが書いてあるのかさっぱり理解できない。。。
第一引数がFunktionの時、\cont -> cont fを返す、と読み取れるのだけど、順番から考えてFunktion f -> fun cont -> f contじゃないと行けないような気がする。
Applyの方も引数の名前がいみふめい。
あー、わかったかも
パーサの結果を見てみると
(Apply (Apply (Apply (Func S) (Apply (Apply (Func S) (Apply (Apply (Func S) (Func I)) (Func I)))
ってかんじにApplyでない関数はFuncが前置きに付いているの。
このFuncを捨てるためにこうなっているのかも。
ちがうかな。。。。
let rec apply = function I -> (fun t -> fun cont -> cont t)
ちがう。。。(Apply (Func K) (Func S))にあわない。。。
あ、わかった。continueのcontだ!
parse "`i`sk`ii"をパースすると(Apply (Func I) (Apply (Func S) (Func K)),"`ii")になるんだ!evalが終わった後で、contが空じゃなかったらもう一度parseする必要があるんだ!