Es gibt ja auch Lisp-Programmierer, die sind richtig hardcore drauf, denn Makros werden in Lisp selbst in der Programmiersprache Lisp programmiert.
Das wäre ungefähr so wie wenn der Sourcecode zuerst mit einem Pascal-Interpreter verarbeitet wird, bevor der Compiler ran darf.
Hier mal als kleine verrückte Idee.
Alles was zwischen #beginmacro und #endmacro liegt sind Anweisungen an den Pascal-Interpreter:
Delphi-Quellcode:
#beginmacro
function Forever():
string;
// neues Makro
begin
result := '
while(True) do';
end;
function Sondersoftware(veriante:integer):
string;
begin
case veriante
of
1: result := '
x * x / 2.0';
2: result := '
(x * x / 2.0) + 0.0001';
else
raise Exception.Create('
ungültige veriante von #Sondersoftware()');
// erzeugt Compilerfehler
end;
end;
function RepeatInline(
const Befehl:
string; Anzahl:Integer):
string;
begin
result := '
';
while (Anzahl > 0)
do
Result := Result + Befehl + '
;'+#13#10;
end;
#endmacro
// Beispiel
RepeatInline('
ShowMessage(''
Hello World''
)', 5);
Aber man muss zugeben: Lisp ist irgendwie besser für Makros geeignet als Pascal/Delphi.