lisp処理系ぽいものを書く(その5くらい)
http://konbu.s13.xrea.com/lib/scm/istsp.d
http://konbu.s13.xrea.com/lib/scm/istsp-20070922.tar.bz2
パーサ部分の構成を考えなおしたら、コードがかなりあっさりめに。quoteも簡単にできました。
> (+ 3 2 1 . (4 5)) 15 > '(1 2 3 '(1 2 3)) (1 2 3 (quote (1 2 3))) > (define a '(1 2 3 . (4 5))) (1 2 3 4 5) > a (1 2 3 4 5) > #\c #\c
quasiquoteとかvectorとか、色々な手続きとか全然作ってない。というかまあ、その辺は作れば作れるのでいいとする。
それよりもスコープ、マクロ、継続あたりを考える。
「スコープってスコープごとにハッシュテーブル作ったら効率わるいよな? どうすんべ」とか思ってたけど、「プログラミング言語処理系」*1読んでて気付いたけど、表は一つでいいんだなきっと。変数名と、スコープごとのユニークIDとかをくっつけて放りこんどきゃいけそう。
マクロはがんばればいいだけか? きっと。
継続は、もしかすっと処理系作る側からはそんなに難しくないのではないだろうか。わかってる人には。他の処理系とかのコードを眺めると、どうも継続まわりのコードにそれほど行数を費やしていない。たぶん、継続を扱いやすいような内部表現にしておいてるからか。minischemeは実行コードも何もかもリストだったりしたし。
*1:「岩波講座ソフトウェア科学」シリーズ5巻