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 のレジスタか何かでリストになってれば動くはず。