Ich versuche, ein Makro zu schreiben, das eine spezielle Klasse von Datenstrukturen mit zugehörigen Funktionen definiert.
Ich weiß, dass das möglich ist; es wird mehrmals in der Kernsprache selbst gemacht.
Wie würde ich das Makro define-struct
in Schema selbst definieren? Es muss make-struct
, struct-<<field>>
, usw. Funktionen erstellt werden.
Ich habe versucht, dies mit define
zu tun, dies definiert jedoch nur die Funktion im lexikalischen Bereich des Makros.
Wie kann ich tatsächlich eine Funktion in einem Makro definieren?
Der Schlüssel für eine Antwort ist datum->syntax
. Die Grundidee ist, dass Sie einige zufällige Daten nehmen und in eine Syntax umwandeln wollen - in diesem Fall verwandeln Sie ein Symbol in einen Bezeichner. Ein Bezeichner ist im Grunde ein Symbol mit einigen lexikalischen Informationen, die (sehr grob) angeben, wie es gebunden ist. Mit datum->syntax
können Sie genau das tun: Sie erwartet eine vorhandene Syntax, aus der die Bindung kopiert wird, und ein Datum (ein Symbol hier), das den Wert enthält, der im Syntax-Wrapper enthalten ist.
Hier ist ein Beispiel, das ein define-struct
-ähnliches Werkzeug zeigt, das dies verwendet:
Und hier ist ein Beispiel für die Verwendung:
%Vor%