0
私が持っている:私はオペコード・コールをコンパイルすると関数定義(Clozure Common Lisp)をコンパイル中にマクロが評価されるのはなぜですか?
(defmacro assign (name value)
(format t "assigning ~A to ~A~%" `,name `,value))
(defun opcode-call (&rest args)
(mapcar (lambda (arg)
(if (stringp arg)
(let ((var (gensym)))
(assign var arg)
var)
arg))
args))
、REPL出力:
assigning VAR to ARG
OPCODE-CALL
はなぜ割り当てはコンパイル時に評価されていますか?
マクロは常に、コンパイルする前に展開されます。マクロ展開中に出力を印刷しないようにするには、 '(format ...)'フォームを評価する代わりに返す必要があります(前にバッククォートを入れておきます。現時点ではとにかく何か))。 – jkiiski