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倍程度までは許容範囲。