古典的マクロ実装完了
こんなに簡単にいっていいのだろうか。
コンパイルフェーズをどう入れ込むかで頭がパンクしそうだが、なんだか一発で動いたっぽい。こんなんでいいのか。
jiji> (def z 1000) 1000 jiji> (def mc1 (mc (x) (list + x z)))jiji> (mc1 10) 1010
今度はsicpのanalyzeフェーズを入れてみよう。
コンパイルと実行のフェーズわけとか、そこら辺はなんだかややこしいなぁ。
ところでメンテナンス性がいいかなぁとデータ主導型でeval,applyを実現しようと思って、javascriptのprototypeオブジェクト指向をバリバリと使ってみているんだけれど、返ってややこしくなってしまったかもしれない。
writeとか、単純な出力ならメソッドで実現できるんだけれど、リストのドット表記とか、略式表現とかを実現しようと思ったら、外側の関数で制御する必要があったり。
どうするべきなんだろう。
今回のLisp on javascriptはjijiと命名しているのだけれど、jijiのオブジェクトはjsのオブジェクトをラップする独自のオブジェクトで動いている。
これはいいのかわるいのか。。
jsのオブジェクトに無理やりメソッドを追加していけばいい気もするのだけれど、jsの世界に影響を及ぼすのは若干気が引けるしなぁ。。