問題5.8 – SICP(計算機プログラムの構造と解釈)その256
2009年09月19日
問題5.8
1つめの here
から there
に達したとき、2つめの here
には制御は移らないため、レジスタ a
の内容は 3
となる。
(define test-machine (make-machine '(a) '() '(start (goto (label here)) here (assign a (const 3)) (goto (label there)) here (assign a (const 4)) (goto (label there)) there)))
実行結果
(set-register-contents! test-machine 'a 0) gosh> done (start test-machine) gosh> done (get-register-contents test-machine 'a) gosh> 3
重複するラベル名を見つけた場合にエラーとするよう修正した extract-labels
手続き。
(define (extract-labels text receive) (if (null? text) (receive '() '()) (extract-labels (cdr text) (lambda (insts labels) (let ((next-inst (car text))) (if (symbol? next-inst) (if (assoc next-inst labels) (error "Multiply defined label: " next-inst) (receive insts (cons (make-label-entry next-inst insts) labels))) (receive (cons (make-instruction next-inst) insts) labels)))))))
修正したシミュレータで実行した場合。
ラベルの重複エラーはアセンブリ時に検出される。
gosh> *** ERROR: Multiply defined label: here
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542