3imp 読んでみる (17)
昨晩、色々ぐだぐだヤるも微妙。新たな環境による疲労と家の雑事でへろへろ。lambda の body に複数の命令を盛り込むためには SICP の M-EVAL で言う eval-sequence みたいのが無いと駄目なのでしょうか。
とりあえず
[lambda (vars body) (list 'close vars (compile body '(return)) next)]
の body な部分??
ウケる部分が
[lambda (vars . body)
ってデキれば良いのだけれど、これはこれで compile の中でどう扱うかが微妙。こんなカンジで良いのかなぁ。VM 方面でどうなってれば良いのか、というソレも考慮が必要に思えます。とりあえず出かけるみたいなので検討中断。
続き
負傷。もの凄く思いっきり指をタタいたので自分でびっくり。小指は包帯なんですがマけずに検討続行。ちなみにまだ麻酔がキいてるのでナニですが、どうなるんでしょ。
そりゃ良いとして
((set! x 1) x)
みたいなソレをどう扱うか、は微妙。どっちかとゆーと
[lambda (vars . body) (list 'close vars (compile-seq body '(return)) next)]
かなぁ。これで出てくるであろうリストを VM に吸わせてみたいな。SICP の eval-sequence をマネると以下か
(define (compile-seq exp next) (if (null? (cdr exp)) (compile (car exp) next) (compile (car exp) (compile-seq (cdr exp) next))))
で、以下の試験を書いてみましたが NG (試験なメセジは略
おかしいな、と言いつつ record-case の定義とか見直してみると動きそげ、に見えるんだけどなぁ ...
ちょっと今日は色々な意味で微妙なので安静にしておきます。