Como implementar um sistema de macro Lisp?

Eu implementei meu próprio Lisp em cima do node.js, posso executar expressões s assim:

(assert (= 3 (+ 1 2)))

(def even? (fn [n] (= 0 (bit-and n 1))))

(assert (even? 4))
(assert (= false (even? 5)))

Agora eu gostaria de adicionar macros - odefmacro função - mas é aqui que estou preso. Gostaria de saber como os sistemas macro são implementados em outros Lisps, mas não consegui encontrar muitos ponteiros (além deesta eesta)

Eu observei o sistema de macro Clojure - o Lisp com o qual estou mais familiarizado - mas isso parecia muito complicado e não consegui encontrar pistas adicionais que possam ser aplicadas com facilidade (as macros Clojure acabam compilando um código de bytes que não se aplica para javascript, também não consegui entender omacroexpand1 função.)

Então, minha pergunta é: dada uma implementação do Lisp sem macros, mas com um AST, como adicionar um sistema de macro como o sistema de macro de Clojure? Esse sistema de macro pode ser implementado no Lisp ou requer recursos extras na implementação no idioma host?

Uma observação adicional: eu não implementeiquote (') ainda porque não consegui descobrir que tipo de valores deveria estar na lista retornada. Deve conter elementos ou objetos AST comoSymbol eKeyword (sendo este último o caso de Clojure)?

questionAnswers(4)

yourAnswerToTheQuestion