scheme and CommonLisp
a-sanに触発されてJavaでlisp作りを始めて、はや1〜2週間。
最初考えた事。
schemeとCommonLispと両方同時に処理するインタープリタが作れないか?
ただでさえ、少ないLisp人口をなぜ、SchemeとCommonLispの2つに
分ける必要があるのか、私には、理解できない。
両方使えた方がいいじゃないか。schemeからCommonLispの関数が呼べて
CommonLispからSchemeの関数が呼べたら、便利じゃない?
基本的なアイディア。
CommonLispにはパッケージという空間があるので、それを利用して
Schemeを分離する。
(in-package "scheme") とやると、Schemeのモードに入る。
しばらく作ってみて、わかったこと。
read -> eval -> print というループのうち、少なくとも
read と print は、schemeで動いているのか、Commonで動いているのかの
モードを見て、動作を変えないといけない。
しょうがないので、パッケージの属性として、Commmonモードか、Scheme
モードかの属性をつけた。
Listの終了がCommonだとnilなんだけど、Schemeだとnilでないのが
かなりややこしい。
最初は、モードに応じてそれを変えようと考えたんだけど、結構メンドくさくなって
しまうので、そこは妥協する事にした。
リストの終了は common-lisp::nil なんだけど、表示でがんばって ()と
表示する事にした。
Schemeはまた論理型があるので、C言語とJavaのif文の違いの
ような、面倒くささがある。