LISP Scheme Part5
■ このスレッドは過去ログ倉庫に格納されています
0782デフォルトの名無しさん
NGNGとりあえず実用価値のない簡単な例ですが・・・
(define foo (lambda () 1))
(define-macro bar (lambda (x) (foo)))
これで (bar) とか書けば 1 に置換されるんですよね?
つーことは define-macro のマクロ展開って、実行時に毎回やるんでしょうか?コンパイル時に1度だけではなくて。
えーと、つまり、コンパイル時に展開しようとすると、foo はまだ代入されてなくて、評価出来ないということになりません? foo は定数だと見破って定数伝搬最適化かければいいんでしょうけど、だったらこういう例は・・・
(define x (read))
(define foo (if x (lambda () 1) (lambda () 2)))
read が行われるのは当然実行時だから、それまで foo は定まらない → コンパイル時には展開できない → 実行時に展開ということになるのですけれど、理解あってます?
■ このスレッドは過去ログ倉庫に格納されています