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 は別々に
実装すれば、動きそう。。。

本屋さんに行ったら

仕事で外出した際に、ちょっと時間があまったので
本屋さんによりました。

grooby on grailsの本は、まだ1冊ぐらいしかないのは
知っていたのですが、本屋さんの棚が
ruby on railsだらけに。
こんなに沢山本が出ているとは知りませんでした。

groovy on grails

groovy on grailsをちょっとだけ触ってみました。

構文的には、ruby on railsより好きになれそうなんだけど、
java でいう extends をどこでやっているのか
さっぱりわかりません

たとえばコントローラのソースを見ていると renderがありますが
これがどこで定義されているのか、さっぱりわかりません。

ruby on railsだと、 java でいう extendsみたいな仕組みがあるので、
上位クラス?(どこか別のところ)で定義されているのは、
わかったのですが、
grailsの場合は、どこにあるのか、さっぱりわかりませんでした。

JavaCC

先週の土曜に、半日ほどJavaCCやっていたら、なんとなく
わかってしまいました。
詳しい事はマニュアルを見てもよくわかりませんが(笑)、
変換されて生成されたJavaソースを見ていたら、なんとなく
使い方がわかってしまいました。

慣れるのが大変という話はありますが、それでも、Javaで
全部構文解析作るより、全然楽そうです。