Scheme Compiler の勉強(41) - string 実装

特に問題無い、はず。

gosh> (let ((s (make-string 5)))
                      (string-set! s 0 #\H)
                      (string-set! s 1 #\e)
                      (string-set! s 2 #\l)
                      (string-set! s 3 #\l)
                      (string-set! s 4 #\o)
                s)
"Hello"

gosh> (run-program '(let ((s (make-string 5)))
                      (string-set! s 0 #\H)
                      (string-set! s 1 #\e)
                      (string-set! s 2 #\l)
                      (string-set! s 3 #\l)
                      (string-set! s 4 #\o)
                      s))
"\"Hello\"\n"
gosh> 

むしろ実装中に、分割していた印字用のライブラリが動かなくなっていて参った。分割しなくてもいいライブラリ(ランタイム)を分割していたためで、早すぎる最適化、の一種かも。
分けるべきではなかったかもしれないけど、まあしょうがない。今後は分割するときにも良く考えよう。

ついでに cond を実装。これは無いとコンパイラ自身の拡張が面倒すぎるため。