memo

SECDインタプリタからSECDコンパイラにしよう。lispコンパイルする。

まずリストじゃなくベクトルにコンパイルしてやる。これは既にやっていた。

INTERP> (compile-exp '((lambda (x) 13) 99))
=>
#(
   :NIL                ;; 0
   :LDC 99          ;;  1
   :CONS             ;; 3
   :LDF 7 10        ;; 4
   :LDC 13          ;; 7
   :RTN               ;; 9
   :AP                  ;; 10
   :STOP)

このフラットな形にしておいて、 tagbody と goto とか使えばいいはず。上の LDF 7 10 はラベルに相当だ。
で、これが素の lisp と比べてどれくらい遅いのか、という話になる。あんまり遅くないといいなぁ。10倍程度までは許容範囲。