2006-01-08から1日間の記事一覧

Corner case 地獄その1

思わず↑「その1」とか書いてしまうあたりがもうorzMacro の template 内で束縛されて改名された識別子を一旦 vector を通して submacro に渡してみる: (let ((x 'outside)) (let-syntax ((foo (syntax-rules () ((_) (let ((x 'inside)) (let-syntax ((bar (…

Macros That Work William Clinger, Jonathan Rees

Naïve にやると O(n^2) なのが let, lambda みたいな束縛構文を expander が認識すると O(n) になるよ、という話。多分。しかし sigscheme では束縛構文をいくらでも追加できるので、論文自体がただの嫌がらせでしかない。

unwrap-syntax が足りてない?

いくらでも corner case が出てくる。怖や怖や… gosh> (define-syntax macro (syntax-rules () ((_) #(b)))) #<undef> gosh> (eq? 'b (vector-ref (macro) 0)) #fあれ? っていうか vector って quote しないといけないのか。変すぎorz</undef>

人任せにするつもりのやり残し

一個忘れてた。"List の最後の一個を除いて処理し、最後の一個は特別扱い (caller に返すとか)" というのは特に多い操作なので、それ用の macro を用意するとよいかもしれない。(FOR_EACH() そのものより多いかも)