Ich bin mir nicht sicher, ob ich den (hervorragenden) Beiträgen der anderen etwas hinzufügen kann, aber...
Lisp-Makros funktionieren aufgrund der Natur der Lisp-Syntax hervorragend.
Lisp ist ein sehr regelmäßig Sprache (denken Sie an alles ist ein Liste ); Makros ermöglichen es Ihnen, Daten und Code als dasselbe zu behandeln (kein String-Parsing oder andere Hacks sind erforderlich, um Lisp-Ausdrücke zu ändern). Kombiniert man diese beiden Funktionen, so erhält man eine sehr sauber Art und Weise, den Code zu ändern.
Edita: Was ich damit sagen wollte, ist, dass Lisp homoikonisch Das bedeutet, dass die Datenstruktur für ein Lisp-Programm in Lisp selbst geschrieben wird.
Am Ende hat man also eine Möglichkeit, seinen eigenen Code-Generator auf der Sprache aufzubauen, indem man die Sprache selbst mit all ihren Möglichkeiten nutzt (z. B. muss man sich in Java mit Bytecode-Weaving durchschlagen, obwohl einige Frameworks wie AspectJ dies mit einem anderen Ansatz ermöglichen, ist es im Grunde ein Hack).
In der Praxis müssen Sie mit Makros Ihre eigenen Mini-Sprache auf Lisp aufsetzen, ohne dass zusätzliche Sprachen oder Werkzeuge erlernt werden müssen, und dabei die volle Leistungsfähigkeit der Sprache selbst nutzen.