LINUX.ORG.RU

Макрос раскрывает код макроса

 


0

2

Есть макрос раскрывающийся в окружение с локальным макросом, определяемым macrolet-ом. Последний раскрывает код вроде:

`(,a ,b)

Только ,a должен подставить первый макрос, а ,b - локальный.

Код вроде такого:

(let ((x ...))
  `(macrolet ((m (y)
                `(,x ,y)))
     ...))

Такое можно описать с backquote синтаксисом?

★★★★★

а что означают запятые в списке?

icefreeze ()

... `(,,x y) ?

Можешь вопрос точнее поставить? Если тебе нужем именно macrolet, то в CLHS пишут: The macro-expansion functions defined by macrolet are defined in the lexical environment in which the macrolet form appears. Declarations and macrolet and symbol-macrolet definitions affect the local macro definitions in a macrolet, but the consequences are undefined if the local macro definitions reference any local variable or function bindings that are visible in that lexical environment.

Если тебе нужно с разных уровней вложенности при раскрытии надо значения тащить, то всё можно, комбинируя функции, макросы и eval-when, но уточни вопрос.

anonymous ()
Ответ на: комментарий от anonymous

Интересует аналог (list ,x y) с backquote синтаксисом. Вроде `(,,x ,y) подходит, но по *slime-macroexpansion* кажется что если значение x - символ z то макрос сначала вставит этот z, а локальный макрос подставит видимое для него значение z.

ados ★★★★★ ()
Ответ на: комментарий от lovesan

Кажется понял как это работает. Спасибо!

ados ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.