Код, который вы предоставили, кажется, работает нормально, хотя вы не предоставили код для assign-bar-to-foo
, поэтому неясно, что это делает.В любом случае, это макрос, который должен делать то, что вы объяснили в своем примере:
(defmacro find-foobar (X)
(let* ((X-as-string (number-to-string X))
(foo (intern (concat "foo-" X-as-string)))
(bar (intern (concat "bar-" X-as-string))))
`(progn (unless (boundp (quote ,foo))
(setq ,foo ,bar))
(find-file ,foo))))
Помните, что вы можете проверить код, до которого расширяется ваш макрос, с помощью (macroexpand FORM)
.