これらの手続きの使い方の例として, 5.1.1節のGCD計算機のモデルである gcd-machineを次のように定義する.
(define gcd-machine
(make-machine
'(a b t)
(list (list 'rem remainder) (list '= =))
'(test-b
(test (op =) (reg b) (const 0))
(branch (label gcd-done))
(assign t (op rem) (reg a) (reg b))
(assign a (reg b))
(assign b (reg t))
(goto (label test-b))
gcd-done)))
make-machineの第一引数は, レジスタ名のリストである. 次の引数は,
表(二要素リストのリスト)で, 演算名と, 演算を実装する(つまり与えられた同じ入力値に対して同じ出力値を出す)Scheme手続きを対にする. 最後の引数は,
5.1節のようにラベルと計算機命令のリストとして制御器を規定する.
この計算機でGCDを計算するには, 入力レジスタを設定し, 計算機を実行開始し, シミュレーションが終了した時に結果を調べる:
(set-register-contents! gcd-machine 'a 206) done (set-register-contents! gcd-machine 'b 40) done (start gcd-machine) done (get-register-contents gcd-machine 'a) 2この計算は, assignのような低レベルの計算機命令を遥かに複雑な演算でシミュレートするので, Schemeで書いたgcd手続きより遥かに遅く走る.