scheme and CommonLisp

a-sanに触発されてJavalisp作りを始めて、はや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文の違いの
ような、面倒くささがある。

これまたしょうがないので、common-lisp:if と scheme:if は別々に
実装すれば、動きそう。。。