- 801 名前:デフォルトの名無しさん mailto:sage [04/10/16 04:37:48]
- >>797
>コンパイルプロセスを実行プロセスから分離する lispには eval関数の様に実行時に式を評価する仕組みがあるので コンパイル環境と実行環境を分離するのは難しいと思う。 でもこの話は、マクロとは関係ないような気がする。 >関数の中でマクロが定義されている場合 関数内でマクロを定義した場合の動作など考えたことが無かった。 で、やってみた。 ;; 関数定義 (defun test (x) (cond ((equal x 1) (defmacro m () 10)) ((equal x 2) (defmacro m () 20)) (t nil)) (m)) ;; 実行結果 ・・・ clisp の場合 (test 0) => 20 (test 1) => 20 (test 2) => 20 ;; 実行結果 ・・・ xyzzy lisp の場合 (test 0) => 関数が定義されていません: m (test 1) => 10 (test 0) => 10 (test 2) => 20 (test 0) => 20 xyzzyではマクロ展開を実行時に行っていて、clispでは関数定義時に 行っているようだ。CLtL2 的にはどうなっているんだろう?
|

|