さかもとのブログ

つらつらと

OnLisp

第16章マクロを定義するマクロ

コード内に生じたパターンは,しばしば新しい抽象化の必要性のしるしである.これはマクロ自身のコードについても全く同様である.いくつかのマクロが似た形で定義されているとき,マクロを定義するマクロを書いてそれらを生成させればよい場合がある. マク…

OnLisp第11章do-tuples/c

clispの組み込みのwith-gensymsを使って,do-tuples/cを定義する場合,OnLispに載っているままではエラーになってしまう. [195]> (load "***.lsp") ;; Loading file ***.lsp ... *** - CONCATENATE: SRC is not a SEQUENCE The following restarts are avai…

clispのwith-gensyms

OnLispのP.149でwith-gensymsを定義しているのだが,clispにはもともとマクロで定義されている. Similar to its namesake from Paul Graham's book “On Lisp”, this macro is useful for writing other macros: (with-gensyms ("FOO-" bar baz zot) ...) ex…

OnLisp第11章condletの定義で知ったCommon LispとScheme(Gauche)のletの違い

タイトル長いけれど,言いたいのは, common lispでは [81]> (let (a b c) (list a b c)) (NIL NIL NIL) Gaucheでは gosh> (let (a b c) (list a b c)) *** ERROR: Compile Error: syntax-error: malformed let: (let (a b c) (list a b c)) "(stdin)":181:(…

OnLisp第7章より

ただのメモです. マクロは呼び出せるし値を返せるので,関数と一緒くたにされがちだ.マクロ定義は関数定義に似ていることもあるし,実際はマクロであるdoを普段「組み込み関数」と呼ぶ人も多い.しかしこの喩えを突き詰めすぎると混乱のもとになる.マクロ…