3imp 読んでみる (18)
色々な意味で微妙。もうすこし頑張ってみます。
call/cc の試験。カンニング (試験の結果をナニ) しつつ以下の試験を書いた
(test-section "call/cc") (test* "(compile '((lambda (x) x) (call/cc (lambda (x) x))) '(halt))" '(frame (halt) (frame (argument (close (x) (refer x (return)) (apply))) (conti (argument (close (x) (refer x (return)) (apply))))))) (compile '((lambda (x) x) (call/cc (lambda (x) x))) '(halt))) (test-end)
順番としては application としての処理がまず最初。
- args に ((call/cc (lambda (x) x)))
- c は (close (x) (refer x (return)) (apply)))
で args は空ではないので
- args に '()
- c に (frame (argument c) (conti (argument (close (x) (refer x (return)) (apply)))))
次の args は空なので以下になる、と
(frame (halt) (frame (argument (close (x) (refer x (return)) (apply))) (conti (argument (close (x) (refer x (return)) (apply))))))
で、当たり、でしょうか。やっぱダメだ。寝ます。