, wenn ich so etwas wie dies (define s (hi,there))
wie kann ich dann in Übereinstimmung wie (match s [(,h , ,t)] ...)
schreiben, aber es funktioniert nicht, weil match
die ,
so wie benötigt, kann ich dies tun?Wie passt man, im Match in Racket?
Antwort
Bitte beachten Sie, dass das Komma ,
ein spezielles Leserkürzel ist. Die (hi,there)
ist ein Lesen als (hi (unquote there))
. Dies ist schwer zu erkennen - da der Standarddrucker Listen druckt, deren erstes Element ist ein unquote
in einer besonderen Art und Weise.
Welcome to DrRacket, version 5.3.0.14--2012-07-24(f8f24ff2/d) [3m].
Language: racket.
> (list 'hi (list 'unquote 'there))
'(hi ,there)
Daher ist das Muster, das Sie benötigen '(Liste h (Liste' unquote t)) '.
> (define s '(hi,there))
> (match s [(list h (list 'unquote t)) (list h t)])
(list 'hi 'there)
einen umgekehrten Schrägstrich verwenden, wenn Sie Komma als Symbol innerhalb eines zitierten Abschnitt verwenden möchten:
> (define s '(hi \, there))
> (match s [(list h c t) (symbol->string c)])
","
Und '|,|
für das Standalone-Komma-Symbol verwenden.
> (match s [(list h '|,| t) (list h t)])
'(hi there)
In beiden Fällen sollten Sie Whitespace verwenden, um Dinge zu trennen und Listen zu verwenden.
(define s (hi,there))
ist ungültig Racket.
Der Grund dafür ist, dass die Datei, die ich parsiere, es verwendet, um viele Dinge zu trennen, und ich möchte Racket-Match verwenden, um die Datei zu analysieren (eigentlich mehr interessiert, wenn ich gefunden habe Komma ist so speziell in Racket!) Aber danke für die Antworten von euch Jungs) –
Ich denke, Sie könnten verwirrt sein, wo Sie Kommas brauchen. In Racket verwenden Sie keine Kommas, um Elemente in einer Liste zu trennen. Stattdessen verwenden Sie nur Leerzeichen. Sag mir, wenn das falsch ist, aber was ich mir vorstelle, ist, dass du einen Ausdruck wie (define s '(hi there))
abgleichen willst. Um dies zu erreichen, würden Sie
(match s
[`(,h ,t) ...])
verwenden Dann werden in dem Bereich, wo die Ellipsen sind, hat die Variable h
den Wert 'hi
und die Variable t
den Wert 'there
Ich möchte nur "Match" in Racket nutzen, um das s-Ausdruck-ähnliche Format mit COMMA in Klammern zu parsen. –
- 1. Makrodefinierendes Makro im Racket?
- 2. Lambda im Racket erklärt
- 3. Trunks im Racket zerschneiden
- 4. Wie passt man einen "Übereinstimmung" -Ausdruck an?
- 5. Regex Match Teilstring, es sei denn, ein anderer Teilstring passt
- 6. Definieren Sie die Reißverschlussfunktion im Racket
- 7. Fehler beim Definieren im Racket
- 8. Lösen eines Puzzlespiels im Racket
- 9. POST/GET Bindungen im Racket
- 10. Wie passt man den OAuth-Service-Provider im Frühling an?
- 11. Wie passt man ein Literal * - und ein Literal + -Zeichen mit vimscript match() zusammen?
- 12. Wie passt man auf Präfix in Elasticsearch
- 13. Streams in Racket
- 14. Wie passt man CQRS an Projekte an?
- 15. Neudefinition eine Liste von Variablen in Racket
- 16. GridLayoutManager - Wie passt man Spalten automatisch an?
- 17. Wie passt man Zend_Tool Output an?
- 18. Wie bekomme ich den Programmnamen in Racket?
- 19. Wie passt man Splitview in Windows 10 an?
- 20. Haltepunkt in Racket setzen?
- 21. Wie passt man die to_json Methode in rails3 an?
- 22. Wie passt man das Ergebnis von matplotlib.pyplot.contourf in den Kreis?
- 23. Überlappendes Modul importiert in Racket
- 24. Wie Jenkins Node Match Credentials
- 25. Wie passt dieser Fehlertyp?
- 26. Migration von Python zu Racket (reguläre Expressions-Bibliotheken und der "Racket Way")
- 27. Wie man genaues Match über multi Match in der elastischen Suche antreibt
- 28. Racket `in-range` funktioniert nicht wie erwartet
- 29. Wie analysiere ich JSON in Racket?
- 30. Wie wird das Kommandozeilenergebnis in Racket zurückgegeben?
den unaufgeforderten Kommentar vergeben, aber es scheint mir, dass die Verwendung von Rackets "Match" zum Parsen von Eingaben, die Kommas enthalten, wahrscheinlich keine gute Idee ist; es sei denn, der Rest der Eingabe ist wirklich sehr nahe an Racket/LISP, dies klingt wie ein Fall für das Beißen der Kugel und die Verwendung eines tatsächlichen Parsers. Entschuldigung im Voraus, wenn ich Ihren Anwendungsfall missverstanden habe. –
@JohnClements Ich denke, du hast Recht .. und die Geschichte ist, dass mein Hauptprogramm in Racket geschrieben ist und ich möchte nur die Datenstrukturen aus dem Parsing der Datei in Racket aufbauen. Die Datei sieht fast wie S-Exp aus, dann bis sehr spät, ich fand, es gab Kommas ... –
Haben Sie irgendeine Art von Spezifikation für welche Formen in der Quelldatei auftreten können? Wird die Quelldatei in einer bekannten Sprache geschrieben? –