Wie definiere ich Funktionen mit Racket-Makros?

8

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?

    
nickname 23.05.2010, 02:19
quelle

1 Antwort

16

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:

%Vor%

Und hier ist ein Beispiel für die Verwendung:

%Vor%     
Eli Barzilay 23.05.2010, 03:07
quelle

Tags und Links