Проблема в том, что ваш макрос print-syntax
заключает в кавычки свои входные данные, а входные данные для макротрансформаторов имеют нерасширенный синтаксис.Это означает, что расширение (print-syntax placeholder)
всегда будет (displayln 'placeholder)
, и при quote
никогда не происходит макроразложение, поэтому привязка placeholder
в области действия не имеет значения.
Если вы хотите использовать синтаксисПараметр, вам нужно создать ссылку на привязку placeholder
.В этом случае вам просто нужно исключить использование quote
.Вы можете изменить print-syntax
на (displayln arg)
, но на этом этапе действительно нет причины для print-syntax
быть макросом, поскольку он эквивалентен функции displayln
.Просто используйте это вместо:
(declare-many-commands
(displayln placeholder))
Это напечатает 10
и 20
, как вы ожидаете.
Возможно, вы действительно хотите quote
, а я нетпонимаю твой вопрос.В этом случае, однако, я думаю, что мне трудно понять, к чему вы клоните, без какого-либо дополнительного контекста.