3imp 読んでみる (13)
Reading Gauche が進捗している。ちょっと今日晩の対応は無理そげ。昼間も若干微妙なんですが開き直ってヤッてみようかな。環境も微妙なんだよなぁ。
current environment を拡張しとけば良いのは分かるんですが、どう考えても SICP 方式で primitive なソレは目印を付けて別な方法取らないと動かなさげ。
そーゆー意味では primitive-procedure-objs な手続きは昨晩なエントリのソレでは微妙。元の通り
(define (primitive-procedure-objs) (map (lambda (proc) (list 'primitive (cadr proc))) primitive-procedures))
にしといた方が良さげ。そしたら後は
[apply () ;; (record a (body e vars) (record (body e vars) a (VM a body (extend e vars r) '() s))]
なソレを何とかするだけ??
primitive だったら a に入っている (primitive #
[apply () (if (primitive? a) (apply (cadr a) r) (record (body e vars) a (VM a body (extend e vars r) '() s)))]
最初、(apply a r) とかヤッてた。上記だと #t がもどってきてるので試験ダウト、なメセジがナニ。よく考えたらここで終わっちゃ駄目じゃん。
[apply () (if (primitive? a) (VM (apply (cadr a) r) '(return) e r s) (record (body e vars) a (VM a body (extend e vars r) '() s)))]
これで試験パス。ちなみに primitive 関連な手続きで追加したのが以下
(define (primitive? l) (eq? 'primitive (car l))) (define primitive-proc (list (list '= =) (list 'car car) (list 'cdr cdr) )) (define primitive-procedure-names (map car primitive-proc)) (define primitive-procedure-objs (map (lambda (proc) (list 'primitive (cadr proc))) primitive-proc)) (define (init-env) (extend '() primitive-procedure-names primitive-procedure-objs))
これで一応 primitive なソレが盛り込めるのでしょうか。まだ追試必要だと思います。
明日
なんとか Reading Gauche なゲンジツトウヒを何とかしたい、ってリソース許せば、なのですが。ええと
- スクリプト送った
- gtags 入れないと
- Gauche なソース
他に何が必要なんだっけ (を
追記
next expression が return 固定は微妙だな。