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))))))

で、当たり、でしょうか。やっぱダメだ。寝ます。