¿Cómo implementar un sistema macro Lisp?

He implementado mi propio Lisp encima de node.js, puedo ejecutar expresiones s como esta:

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

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

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

Ahora me gustaría agregar macros: eldefmacro función, pero aquí es donde estoy atascado. Me pregunto cómo se implementan los macro sistemas en otros Lisps, pero no pude encontrar muchos punteros (aparte deesta yesta)

He examinado el sistema macro Clojure, el Lisp con el que estoy más familiarizado, pero eso parecía demasiado complicado y no pude encontrar pistas adicionales que pueda aplicar fácilmente (las macros Clojure finalmente se compilan en código de bytes que no se aplica) a javascript, tampoco pude entender elmacroexpand1 función.)

Entonces mi pregunta es: dada una implementación de Lisp sin macros pero con un AST, ¿cómo se agrega un sistema macro como el sistema macro de Clojure? ¿Se puede implementar este sistema macro en Lisp, o requiere características adicionales en la implementación en el idioma del host?

Un comentario adicional: no he implementadoquote (') aún porque no pude averiguar qué tipo de valores deberían estar en la lista devuelta. Debe contener elementos u objetos AST comoSymbol yKeyword (este último es el caso de Clojure)?