SICP 読み (271) 5.2 レジスタ計算機での計算

頭痛い。明日まで引っ張るかもしれませんが検討着手。

問題 5.19

add-label-name に手を入れればなんとかなりそうな気がしとります。

(define (add-label-name label insts)
  (let ((cnt 0))                                               ;; 5.19
    (for-each
     (lambda (inst)
       (if (null? (car (car inst)))
	   (begin                                              ;; 5.19
	     (set! cnt (+ cnt 1))                              ;; 5.19
	     (set-car! inst (cons (list label cnt)             ;; 5.19
				  (instruction-text inst)))))) ;; 5.19
     insts)
    insts))

こうしておいて、breakpoint なリストを machine のローカルで持っておけば、machine#execute な手続きで途中停止が可能ではないかな、と見てるんですが ...
ここまでなら動作確認は問題ないはず。

追記

一応 gosh 上で確認したトコロでは (label n) な形になっている模様。あとは breakpoint なソレが machine のレジスタか何かでリストになってれば動くはず。