История изменений
Исправление quasimoto, (текущая версия) :
ты без quote давай
(my-cond-macro ((> 1 2) 1) ((< 1 2) 2) (nil 3))
Видишь где-то определение my-cond-macro? Его нет, потому что my-cond-macro это ни что иное как my-cond-function на нужной стадии.
Тут товарищ распинался, что напишет функцию, полностью эквивалентную макросу.
Ну дык любой макрос это просто функция - (macro-function 'любой-макрос), она с AST работает во время мета-стадии.
Исторически в древних лиспах так и велосипедили - делали quote, функции (стадии выполнения) и eval, потом эта машинерия (quote и eval) спряталась в экспандере, мета-стадия была явно выделена вместе с разграничением символов по функциям (стадии выполнения) и макросам (функциям стадии раскрытия). Хотя кое-кто эту историю проходит снова, picolisp, например.
Исходная версия quasimoto, :
ты без quote давай
(my-cond-macro ((> 1 2) 1) ((< 1 2) 2) (nil 3))
Видишь где-то определение my-cond-macro? Его нет, потому что my-cond-macro это ни что иное как my-cond-function на нужной стадии.
Тут товарищ распинался, что напишет функцию, полностью эквивалентную макросу.
Ну дык любой макрос это просто функция - (macro-function 'любой-макрос), он с AST работает во время мета-стадии.
Исторически в древних лиспах так и велосипедили - делали quote, функции (стадии выполнения) и eval, потом эта машинерия (quote и eval) спряталась в экспандере, мета-стадия была явно выделена вместе с разграничением символов по функциям (стадии выполнения) и макросам (функциям стадии раскрытия). Хотя кое-кто эту историю проходит снова, picolisp, например.