История изменений
Исправление
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)). Ну а потом получившееся уже обрабатывается как нормальная лисп-программа.
Правда если в пределах одного списка обнаружится больше одного «внешнего» макроса, получится ересь.
В общем, хотелось бы как-то эту задачу красиво решить, но именно красиво не получается.