memo

ふむ、いちおうこんなのも動くらしい。自分で書いていても良くわからんけど。

gosh> (eval3 '((lambda (o e n)
                 (o o e n))
               (lambda (o e x)
                 (if (= x 0)
                     "even"
                     (e o e (+ x (- 1)))))
               (lambda (o e x)
                 (if (= x 0)
                     "odd"
                     (o o e (+  x (- 1)))))
               10))
(frame (halt) (constant 10 (argument (close (o e x) (frame (test (constant odd (return)) (frame (argument (refer e (argument (refer o (argument (refer o (apply))))))) (frame (argument (refer x (argument (refer + (apply))))) (constant 1 (argument (refer - (apply))))))) (constant 0 (argument (refer x (argument (refer = (apply))))))) (argument (close (o e x) (frame (test (constant even (return)) (frame (argument (refer e (argument (refer o (argument (refer e (apply))))))) (frame (argument (refer x (argument (refer + (apply))))) (constant 1 (argument (refer - (apply))))))) (constant 0 (argument (refer x (argument (refer = (apply))))))) (argument (close (o e n) (refer n (argument (refer e (argument (refer o (argument (refer o (apply)))))))) (apply)))))))))
"even"