ウォンツテック

そでやまのーと

2010-04-01から1ヶ月間の記事一覧

LET OVER LAMBDA Reading

昨日の続きでバッククォートでネストされているマクロを追ってみる。 macroexpand-1がマクロを1回分だけ展開する関数なのでこれを使ってみてみよう。 (macroexpand-1 '(defmacro! square (o!x) `(* ,g!x ,g!x))) このようにmacroexpand-1に展開させたいマク…

LET OVER LAMBDA Reading

マクロを定義するマクロを定義するには,しばしば入れ子になった逆クォートが必要になる.逆クォートの入れ子は理解し辛いことで悪評が高い.よく使われる形にはいつか慣れるだろうが,逆クォートの付いた任意の式を見て,どのように展開されるかを言えるよ…

On Lisp

Paul GrahamのOn Lispの訳ってネットで公開されてたんだね。 知らなかったよ。http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/ 最近買ったDoug HoyteのLET OVER LAMBDAによく引用が出てきていたから、ちょっと読んでみようかな。

複数call/ccに対応

GitHub - sodeyama/slisp: lisp interpreter sLispの以下の点を改善しました。 コメントを可能にしました call/ccで生成するラムダ式で使う変数名をgensymで作るようにしました(変数名の衝突を防ぐ目的) call/ccを複数書けるようにしました。(ただし、トッ…

Software Design

そういえば、Software Design 2010年5月号で記事書きました。 Software Design 2010年5月号|技術評論社 * Emacsのトラノマキ 【13】俺流Lispインタプリタ……アリエルです。どこがemacsの記事なんだ、という突っ込みがあるかもしれませんが emacsって結局elis…

ぱーふぇくとYコンビネータ

slisp/slisp-ycc.el at master · sodeyama/slisp · GitHubsLispのベータ変換にバグがあり (defun Y (f) ((lambda (x) (f (x x))) (lambda (x) (f (x x))))) (print ((Y (lambda (f) (lambda (n) (if (= n 0) 1 (* n (f (- n 1))))))) 8)) みたいなコードをsL…

sLispで継続

Lisp処理系で継続も(ry ってことでsLispで継続を実装しました。 S式パースするのとcatch throw使う方法で書いたらなんかあっさり書けた。ま、厳密に仕様みながら実装したわけではないので色々動作はおかしいと思う あとcall/ccは1個しか書けません call/cc使…

sLispでYコンビネータ

「Yコンビネータも出来ないLisp処理系って処理系として終わってるよね。キモッ!」 と女子大生に言われないように、sLispでYコンビネータを出来るようにしました。 前回アップした似非Lisp処理系からかなり書き換えてます。 とりあえずdefunって結局lambdaだ…