Kann ich ein Makro erstellen, so dass ich sequence-
Funktionen mit einer s-
aufrufen kann? Daher sollte ich s-length
, s-filter
und s-map
anstelle von sequence-length
, sequence-filter
und sequence-map
schreiben können. Vielen Dank.Makro zum Umbenennen von Sequenz- Funktionen
Antwort
Sie können filtered-in
von racket/require
verwenden, um diese Art von Transformation durchzuführen. Hier ist ein einfaches Beispiel:
#lang racket
(require racket/require
(filtered-in (λ (name) (regexp-replace #rx"^sequence-" name "s-"))
racket/sequence))
(s-ref '(1 2 3) 1)
Wenn Sie sich mit dieser Art der Sache oft finden, wäre es nicht zu hart sein, um ein require transformer zu schreiben, den filtered-in
erweitern würde:
#lang racket
(require (for-syntax racket/require-transform
syntax/parse)
racket/require)
(define-syntax reprefix-in
(make-require-transformer
(syntax-parser
[(_ original-prefix:id new-prefix:id require-spec:expr ...)
#:with replacer (string-append "^" (regexp-quote (symbol->string (syntax-e #'original-prefix))))
#:with replacement (symbol->string (syntax-e #'new-prefix))
(expand-import #'(filtered-in (λ (name) (regexp-replace (regexp 'replacer) name 'replacement))
(combine-in require-spec ...)))])))
dann können Sie es wie folgt verwenden:
(require (reprefix-in sequence- s- racket/sequence))
(s-ref '(1 2 3) 1)
Ja, es gibt. Um die Ebenen der Cludgyness zu verstehen.
Die Art, wie ich empfehle Sie jedoch, ist zu verwenden rename-in
Um jede dieser Funktionen beim Import umzubenennen. So würde zum Beispiel der Code wie folgt aussehen:
#lang racket
(require (rename-in racket/sequence
[sequence-length s-length]
[sequence-map s-map]
[sequence-filter s-filter]
...))
Es gibt noch weitere fortgeschrittenere Möglichkeiten, dies zu tun, die Sie nicht explizit erforderlich, um jede Kennung auflisten, mit module->exports
, regexp-match
, format-id
und make-require-transformer
. Aber das scheint mir spröde zu sein, und es ist besser, wenn Sie explizit angeben, welche Namen Sie umbenennen wollen.
- 1. Excel-Makro zum Umbenennen der Dateierweiterung
- 2. Mit VBA-Makro-Funktionen zum Einfügen von VS nur Makro
- 3. Makro zum Umbenennen von Threading-Code funktioniert nicht
- 4. Aufruf von Funktionen in einer Sequenz zum Speichern von Ergebnissen
- 5. Makro zum Ausführen von Makro
- 6. Excel-Tabelle mit VBA-Makro umbenennen
- 7. Umbenennen von Funktionen unter Beibehaltung der Abwärtskompatibilität
- 8. Umbenennen von Funktionen zur Laufzeit in PHP
- 9. Makro -> mit anonymen Funktionen
- 10. Makro zum Formatieren von Zellen
- 11. Makro zum Löschen von Zellen
- 12. Makro-rekursive Erweiterung zu einer Sequenz
- 13. Wie bewertet man eine Sequenz von unreinen Funktionen in Clojure?
- 14. Clean-Code für Sequenz von Map/Filter/Reduce-Funktionen
- 15. Einfache Möglichkeit zum Umbenennen von Schienen-Controllern
- 16. Umbenennen von Dateien zum Entfernen bestimmter Zeichen
- 17. Bash-Skript zum Umbenennen von Dateien
- 18. Eclipse-Einstellung zum automatischen Umbenennen von Klassendateien
- 19. Standard-Methode zum Umbenennen von xcode-Projekt
- 20. SSRS-Ausdruck zum Umbenennen von Nullwerten
- 21. Windows Batch-Skript zum Umbenennen von Dateien
- 22. Java-Code zum Umbenennen von Java-Paketen
- 23. Gleiche Sequenz von Numpy-Funktionen auf mehreren 1D-Arrays
- 24. Frage zum round_up Makro
- 25. Scala Sequenz zu einer Sequenz von Sequenz
- 26. Excel-Makro zum Verschieben von Spaltendaten
- 27. F1-Taste zum Ausführen von Makro
- 28. Makro zum Löschen von Überschriften in Word
- 29. Excel-Makro zum Kopieren von Arbeitsblättern
- 30. Microsoft Word-Makro zum Ändern von Überschriftenstilen
Sollte dies irgendwo in einer Bibliothek gestellt werden? –
@AlexKnauth Möglicherweise. Es mag sinnvoll sein, es in "Racket/require" zu haben, aber ich habe es widerstrebend getan, neue Dinge zu "base" hinzuzufügen, da es das einzige Paket ist, das (offensichtlich) nicht in älteren Racket-Versionen verwendet werden kann. Ich bin mir nicht sicher, ob wir es in einem separaten Paket haben würden, aber das macht Sinn, aber mit einigen anderen Transformatoren, die ich geschrieben habe, könnte es sich lohnen. –