LINUX.ORG.RU

История изменений

Исправление geekless, (текущая версия) :

В CL есть сахар для конструирования списков в компайл-тайме

Мне не нравится именно сама необходимость в явном виде заворачивать конструкцию в квотирование. В идеале, хотелось бы, чтобы backquote не было, а функция его выполнялась.

Можно навелосипедить собственную обертку и вынести её на самый верхний уровень программы, чтобы не мозолила глаза. Получится как-то так:

(use-outer-macro (
   (def-outer-macro unbox do-unbox)
   (def-outer-macro another-unbox do-another-unbox)
   (весь)
   (остальной)
   (код)
   (программы)))

В результате работы макроса use-outer-macro, везде, где в глубинах «всего остального кода» встечаются unbox или another-unbox, их внешний список будет завернут в соответственно do-unbox и do-another-unbox. Т.е. (some-function a b c (unbox v) d) превращается после подстановки в (do-unbox (some-function a b c (unbox v) d)). Ну а потом получившееся уже обрабатывается как нормальная лисп-программа.

Правда если в пределах одного списка обнаружится больше одного «внешнего» макроса, получится ересь.

В общем, хотелось бы как-то эту задачу красиво решить, но именно красиво не получается.

Исходная версия geekless, :

В CL есть сахар для конструирования списков в компайл-тайме

Мне не нравится именно сама необходимость в явном виде заворачивать конструкцию в квотирование. В идеале, хотелось бы, чтобы backqoute не было, а функция его выполнялась.

Можно навелосипедить собственную обертку и вынести её на самый верхний уровень программы, чтобы не мозолила глаза. Получится как-то так:

(use-outer-macro (
   (def-outer-macro unbox do-unbox)
   (def-outer-macro another-unbox do-another-unbox)
   (весь)
   (остальной)
   (код)
   (программы)))

В результате работы макроса use-outer-macro, везде, где в глубинах «всего остального кода» встечаются unbox или another-unbox, их внешний список будет завернут в соответственно do-unbox и do-another-unbox. Т.е. (some-function a b c (unbox v) d) превращается после подстановки в (do-unbox (some-function a b c (unbox v) d)). Ну а потом получившееся уже обрабатывается как нормальная лисп-программа.

Правда если в пределах одного списка обнаружится больше одного «внешнего» макроса, получится ересь.

В общем, хотелось бы как-то эту задачу красиво решить, но именно красиво не получается.