on_lisp
19章「クエリコンパイラ」 19.1 データベース ok 19.2 パターンマッチングクエリ ok 19.3 クエリインタプリタ かなり複雑な再帰だ 19.4 束縛に関する制限 notの挙動が今ひとつわからない。 19.5 クエリコンパイラ やべー鬼難しい。 とりあえず読み飛ばす。後…
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…
15章 関数を返すマクロ 15.1 関数の構築 引数ひとつだし、あまり強力でない気がする。 mapなどに使うのにはいいかもしれない。 ok 15.2 Cdr部での再帰 (defmacro alrec (rec &optional base) "cltl2 version" (let ((gfn (gensym))) `(lrec #'(lambda (it ,g…
13章「コンパイル時の計算処理」 新しいユーティリティー この例は微妙な気がする。 Bezier曲線 定数値が与えられるなら、コンパイル時に計算を移せる。 普通ならコンパイラがやる機能を人間ができる。 ok 14章「アナフォリックマクロ」 アナフォリックな変…
12章 「汎変数」 概念 ok lispらしくなってきた。 複数回の評価に関わる問題 副作用コードを評価してから渡したいが、評価すると場所を表す式じゃなくなってしまう。 define-modify-macroは3個の引数を取る. 定義したいマクロの名前 (汎変数の後に)取るか…
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…
引数の評価の回数 これはかなり重要。 展開形の中で複数回引数を使うなら、letで束縛すべき。 評価の順番 これは重要だ。あまり気にしないことも多いので注意しないと。 マクロ展開関数の副作用 こういうことはしない。 でもinternはaifとかで使う。 ok 再帰…
環境を作る場合は、補足されてはいけない変数はgensymなどで隠す。 packageなども使える場合がある。 ok
ok
突然ですが、On lispを読んでいます。 http://www.komaba.utmc.or.jp/~flatline/onlispjhtml/index.html Web版は↑にあります。 マクロはどのように動作するか マクロ定義とは実質的にLispコードを生成する関数である. Lispのマクロは並外れて強力である. な…