2008-12-01から1ヶ月間の記事一覧
こんなに簡単にいっていいのだろうか。 コンパイルフェーズをどう入れ込むかで頭がパンクしそうだが、なんだか一発で動いたっぽい。こんなんでいいのか。 jiji> (def z 1000) 1000 jiji> (def mc1 (mc (x) (list + x z))) jiji> (mc1 10) 1010 今度はsicpのa…
古典的マクロってどうやって実装するのか。 コンパイラフェーズで評価すればいいのかなぁ。 その際の環境をどうするべきかとか、ちょっと考えないとなぁ。末尾再帰最適化もやりたい。Lisp in small peacesとかいう本がどっかに転がっているはずなんだけれど、…
使ってみて不便だったら直す方向で。。 function js_new (fn, arg) { var ins={}; ins.__proto__=fn.prototype; var ret=fn.apply(ins, arg); if (ret instanceof Object) { return ret; } return ins; }
javascriptのnew演算子をwrapするところで詰まっている。 new TestObj(arg1, arg2) というのをメタプログラムしたいのだが、関数呼び出しの場合であればFunctionオブジェクトにapplyメソッドが用意されているので、簡単なのだけれど、new演算子の場合は、い…
休みの間に、javascript上で動作するLispと、自分用のwikiを作っておきたい。 まずはjavascript上のLispを実装してみた。 javascriptのapiをほとんどそのまま呼び出せて、+αでマクロが使えると便利かなぁと思っていたので、ゴチャゴチャ実装してみたが、なか…
とおもったら、schemeでもなさそうだ。。うーん、そんなもんか。 lookup-variableをapiで用意しないもんなのかな。
schemeでマクロ定義時に、ifや関数名にすべてwith-moduleを使えばいいのではないかという気がしてきた。 マクロを生成するマクロとかでもうまく動作するのかな。名前空間がレキシカルでわかれるから、すべてうまくいく気がする。パフォーマンスは大丈夫かな…
http://cadr.g.hatena.ne.jp/g000001/20080205そうかやっぱり。funcallは必須じゃない気がしてきた。 でもそうするとレキシカル空間とパケージ空間にわかれて、 同じシンボルがどちらをさすのかがファジーに特定されるということか。schemeの場合だとレキシ…
scheme(gauche?)のwith-moduleで、安全な古典的マクロがかけるのだろうか。万事解決なのか。
あー、なんだかcommon lispが最高な気がしてきたぞ。 安全なマクロ万歳なきがしてきた。
クールで将来性があるlisp2。実用的なlisp on javascript。レキシカルスコープのemacs like なターミナルエディタ。
エディタはemacs lispがメインなのだけれど、設定かえたり関数やマクロ書いたりするのに、ダイナミックスコープなため、すごく書きづらい。 まぁそれでもすばらしいものには違いないのだけれども。xyzzyはすばらしいのだけれど、windowsアプリなのがどうもな…
syntax-caseがすばらしいものなのならば、schemeはlispとして完全なものになる気がする。いまのところよくわからないから、古典的マクロが安全にかけるlisp2に引かれている。 でもlisp2って何なのかよくわからなくなってきた。 関数と変数の名前空間を分ける…
syntax-caseは複雑でよくわからん。 hygienicマクロには、ずっと関わらないようにしてきたけど、syntax-caseが気になり始めてそうもいかなくなった。define-syntaxはトップレヴェルでしか定義できず、そしてトップレヴェルの変数は特別扱いするということな…
文章が取り留めなさすぎる。何がいいたいのか自分でもわからない。
eval "my $a=10"; print $a; ## 何も表示されない あらびっくり。ろくなREPLが作れない。 my(レキシカル)変数が使えない。だから、perlのデバッガでmyが使えないのか。。
lispがいぢれなくてつらい日々が続く。