on_lisp

Onlisp

19章「クエリコンパイラ」 19.1 データベース ok 19.2 パターンマッチングクエリ ok 19.3 クエリインタプリタ かなり複雑な再帰だ 19.4 束縛に関する制限 notの挙動が今ひとつわからない。 19.5 クエリコンパイラ やべー鬼難しい。 とりあえず読み飛ばす。後…

Onlisp

18章「分配」 18.1リストに対する分配 ok 18.2他の構造 > (dbind (a b c) #(1 2 3) (list a b c)) (1 2 3) > (dbind (a (b c) d) '( 1 #(2 3) 4) (list a b c d)) (1 2 3 4) > (dbind (a (b . c) &rest d) '(1 "fribble" 2 3 4) (list a b c d)) (1 #\f "rib…

Onlisp

15章 関数を返すマクロ 15.1 関数の構築 引数ひとつだし、あまり強力でない気がする。 mapなどに使うのにはいいかもしれない。 ok 15.2 Cdr部での再帰 (defmacro alrec (rec &optional base) "cltl2 version" (let ((gfn (gensym))) `(lrec #'(lambda (it ,g…

Onlisp

13章「コンパイル時の計算処理」 新しいユーティリティー この例は微妙な気がする。 Bezier曲線 定数値が与えられるなら、コンパイル時に計算を移せる。 普通ならコンパイラがやる機能を人間ができる。 ok 14章「アナフォリックマクロ」 アナフォリックな変…

Onlisp

12章 「汎変数」 概念 ok lispらしくなってきた。 複数回の評価に関わる問題 副作用コードを評価してから渡したいが、評価すると場所を表す式じゃなくなってしまう。 define-modify-macroは3個の引数を取る. 定義したいマクロの名前 (汎変数の後に)取るか…

Onlisp

11章「古典的なマクロ」 コンテキストの生成 when-bind*じゃなくて when-let*でいいんじゃないだろうか。 (defmacro when-let* (binds &body body) (if (null binds) `(progn ,@body) `(let (,(car binds)) (and ,(caar binds) (when-let* ,(cdr binds) ,@bo…

On lisp 10章 「マクロそのほかの落とし穴」

引数の評価の回数 これはかなり重要。 展開形の中で複数回引数を使うなら、letで束縛すべき。 評価の順番 これは重要だ。あまり気にしないことも多いので注意しないと。 マクロ展開関数の副作用 こういうことはしない。 でもinternはaifとかで使う。 ok 再帰…

On lisp 9章 「変数補足」

環境を作る場合は、補足されてはいけない変数はgensymなどで隠す。 packageなども使える場合がある。 ok

On lisp 8章 「いつマクロを使うべきか」

ok

On lisp 7章 「マクロ」

突然ですが、On lispを読んでいます。 http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/index.html Web版は↑にあります。 マクロはどのように動作するか マクロ定義とは実質的にLispコードを生成する関数である. Lispのマクロは並外れて強力である. な…