FUZZ> (defvar *foo* nil)
*FOO*
FUZZ> (defmacro bar()
(format t "foo: ~A" *foo*)
`(+ 1 1))
BAR
FUZZ> (defmacro bot()
(let ((*foo* 17))
`(bar)))
BOT
FUZZ> (bot)
foo: NIL
내 정신 모델 (명확하게 잘못은) 다음과 같은 순서대로 일이 말한다 *foo*
(17
)의 현재 값을 인쇄하고 매크로가 아닌 (+ 1 1)
양식을 반환하는 매크로 확장 bar
의 매크로 확장 시간이 끝났으며 이제는 (+ 1 1)
양식을 평가하고 2
을 반환합니다.행동
왜 내가 잘못 되었습니까?
내가 원하는 것을 쉽게 할 수 있습니까?
, 그래서 내 실수가'의 결합을 생각했다 * foo는 *'역학적 변수처럼, 모든 ** 시간 동안 효과 ** 차례대로 모든 양식을 매크로 확장 (핵심) 및 (결정적으로) 가져 갔다. 사실, 일단'(bar)'가 반환되면, Joshua가 분명히하는 것처럼 우리는'* foo *'로 끝난다. – gtod