Lisp Scheme Part30
レス数が950を超えています。1000を超えると書き込みができなくなります。
0982923
2010/09/01(水) 19:34:05>>981 の場合は (ns1 a) は↓な感じに展開される。
(let ([result (assq 'a (map (lambda (u) (cons (cadr u) (caddr u)))
'((define a 1)
(define b 2))))])
(if result (cdr result) (string-append (symbol->string 'a) ": undefined variable")))
ランタイムにこれが走るわけ。
syntax-rules ではこれくらいしか書きようがないんだけど実行効率は悪いな。
>>935 ではマクロ展開フェイズで 1 になるのでランタイムではただの1。
>>923 では定義時に (define a 1) が (define g1 1) みたいな感じに置き換えられて、 (ns a) が g1 に展開される感じを考えてた。 便宜上 g1 とか書いちゃったけど、実際には衝突回避のリネームで作られる変数で、直接表すことのできない変数ね。
レス数が950を超えています。1000を超えると書き込みができなくなります。