2008-12-01から1ヶ月間の記事一覧

古典的マクロ実装完了

こんなに簡単にいっていいのだろうか。 コンパイルフェーズをどう入れ込むかで頭がパンクしそうだが、なんだか一発で動いたっぽい。こんなんでいいのか。 jiji> (def z 1000) 1000 jiji> (def mc1 (mc (x) (list + x z))) jiji> (mc1 10) 1010 今度はsicpのa…

古典的マクロ、末尾再帰最適化、Lisp2化、web用のrepl

古典的マクロってどうやって実装するのか。 コンパイラフェーズで評価すればいいのかなぁ。 その際の環境をどうするべきかとか、ちょっと考えないとなぁ。末尾再帰最適化もやりたい。Lisp in small peacesとかいう本がどっかに転がっているはずなんだけれど、…

うーん。Date以外で動くからとりあえずいいかなぁ。

使ってみて不便だったら直す方向で。。 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; }

Lispからjavascriptのオブジェクトを生成したい

javascriptのnew演算子をwrapするところで詰まっている。 new TestObj(arg1, arg2) というのをメタプログラムしたいのだが、関数呼び出しの場合であればFunctionオブジェクトにapplyメソッドが用意されているので、簡単なのだけれど、new演算子の場合は、い…

javascriptで俺Lisp

休みの間に、javascript上で動作するLispと、自分用のwikiを作っておきたい。 まずはjavascript上のLispを実装してみた。 javascriptのapiをほとんどそのまま呼び出せて、+αでマクロが使えると便利かなぁと思っていたので、ゴチャゴチャ実装してみたが、なか…

javascriptである変数が束縛済みかどうか調べるてだてがない。

とおもったら、schemeでもなさそうだ。。うーん、そんなもんか。 lookup-variableをapiで用意しないもんなのかな。

with-moduleですべて解決した気がする。

schemeでマクロ定義時に、ifや関数名にすべてwith-moduleを使えばいいのではないかという気がしてきた。 マクロを生成するマクロとかでもうまく動作するのかな。名前空間がレキシカルでわかれるから、すべてうまくいく気がする。パフォーマンスは大丈夫かな…

lisp-2

http://cadr.g.hatena.ne.jp/g000001/20080205そうかやっぱり。funcallは必須じゃない気がしてきた。 でもそうするとレキシカル空間とパケージ空間にわかれて、 同じシンボルがどちらをさすのかがファジーに特定されるということか。schemeの場合だとレキシ…

with-module

scheme(gauche?)のwith-moduleで、安全な古典的マクロがかけるのだろうか。万事解決なのか。

名前空間

あー、なんだかcommon lispが最高な気がしてきたぞ。 安全なマクロ万歳なきがしてきた。

欲しいもの

クールで将来性があるlisp2。実用的なlisp on javascript。レキシカルスコープのemacs like なターミナルエディタ。

そしてemacs lispは

エディタはemacs lispがメインなのだけれど、設定かえたり関数やマクロ書いたりするのに、ダイナミックスコープなため、すごく書きづらい。 まぁそれでもすばらしいものには違いないのだけれども。xyzzyはすばらしいのだけれど、windowsアプリなのがどうもな…

そしてlisp2とは

syntax-caseがすばらしいものなのならば、schemeはlispとして完全なものになる気がする。いまのところよくわからないから、古典的マクロが安全にかけるlisp2に引かれている。 でもlisp2って何なのかよくわからなくなってきた。 関数と変数の名前空間を分ける…

未だによくわからないこと

syntax-caseは複雑でよくわからん。 hygienicマクロには、ずっと関わらないようにしてきたけど、syntax-caseが気になり始めてそうもいかなくなった。define-syntaxはトップレヴェルでしか定義できず、そしてトップレヴェルの変数は特別扱いするということな…

なんだか日本語がかけない

文章が取り留めなさすぎる。何がいいたいのか自分でもわからない。

perlのevalがダメすぎる件について

eval "my $a=10"; print $a; ## 何も表示されない あらびっくり。ろくなREPLが作れない。 my(レキシカル)変数が使えない。だから、perlのデバッガでmyが使えないのか。。

仕事に忙殺されている

lispがいぢれなくてつらい日々が続く。