proper-list? 手続きのアセンブリ記述

SICP では仮想マシンの解釈器をわざわざ使ってインタプリタコンパイラを記述してますけど、 Scheme でそのまま実行できる仮想ストアド・レジスタ機械のアセンブリを、 Scheme の手続きとして記述することができます。 例として、 正規リストかどうかを検査する手続きを記述してみました。

(define (proper-list? x)
 (define (go k) (k))
 (define (return v) v)
 (let ((t0 #f) (t1 #f) (t2 #f))
  (define (L1) (set! t1 x)
               (set! t2 t1)
               (go   L2) )
  (define (L2) (set! t0 (null? t2))
               (if t0 (go L5) (begin
               (set! t0 (pair? t2))
               (if t0 (go L3) (begin
               (set! t1 'dotted)
               (go   L6) )))))
  (define (L3) (set! t2 (cdr t2))
               (set! t0 (null? t2))
               (if t0 (go L5) (begin
               (set! t0 (pair? t2))
               (if t0 (go L4) (begin
               (set! t1 'dotted)
               (go   L6) )))))
  (define (L4) (set! t1 (cdr t1))
               (set! t2 (cdr t2))
               (set! t0 (eq? t1 t2))
               (set! t0 (not t0))
               (if t0 (go L2) (begin
               (set! t1 'cyclic)
               (go   L6) )))
  (define (L5) (set! t1 'proper)
               (go   L6) )
  (define (L6) (set! t2 'proper)
               (set! t0 (eq? t1 t2))
               (return t0) )
  (L1)))