Es ist sehr üblich, dass Scheme-Makros "abgeleitete" Bezeichner machen, so wie die Definition eines Datensatztyps foo
(unter Verwendung der R6RS-API für syntaktische Datensätze) standardmäßig einen Konstruktor namens make-foo
definiert. Ich wollte etwas ähnliches in meinem eigenen Makro machen, aber ich konnte keinen sauberen Weg innerhalb der Standardbibliotheken finden. Ich am Ende dieses Schreiben:Der sauberste Weg, um einen "abgeleiteten" Bezeichner zu erstellen?
(define (identifier-add-prefix identifier prefix)
(datum->syntax identifier
(string->symbol (string-append prefix
(symbol->string (syntax->datum identifier)))))
I umwandeln ein Syntax-Objekt (angenommen eine Kennung zu sein) in ein Datum, konvertieren, das Symbol in einen String, stellen eine neue Zeichenfolge mit dem Präfix vorangestellt, konvertieren, die Zeichenfolge in eine Symbol und dann schließlich dieses Symbol in eine Kennung in der gleichen syntaktischen Umgebung wie identifier
.
Das funktioniert, aber es scheint umständlich und unordentlich. Gibt es eine sauberere oder mehr idiomatische Möglichkeit, dies zu tun?