jeśli mam coś takiego (define s (hi,there))
wtedy jak mogę pisać w meczu jak (match s [(,h , ,t)] ...)
Ale to nie działa, ponieważ match
potrzebuje ,
więc jak mogę to zrobić?Jak dopasować, w meczu w Racket?
Odpowiedz
Pierwsza uwaga, że przecinek ,
jest specjalnym skrótem czytelnika. Numer (hi,there)
jest odczytywany jako (hi (unquote there))
. To jest trudne do wykrycia - - ponieważ domyślna drukarka drukuje listy , których pierwszym elementem jest unquote
w specjalny sposób.
Welcome to DrRacket, version 5.3.0.14--2012-07-24(f8f24ff2/d) [3m].
Language: racket.
> (list 'hi (list 'unquote 'there))
'(hi ,there)
W związku z tym potrzebny jest wzór "(lista h (lista" nieokreślona t)) ".
> (define s '(hi,there))
> (match s [(list h (list 'unquote t)) (list h t)])
(list 'hi 'there)
pomocą ukośnika, jeśli chcesz używać przecinka jako symbol wewnątrz cytowanego paragrafu:
> (define s '(hi \, there))
> (match s [(list h c t) (symbol->string c)])
","
I używać '|,|
dla autonomicznego przecinkami symbolem.
> (match s [(list h '|,| t) (list h t)])
'(hi there)
W obu przypadkach naprawdę należy użyć spacji do oddzielenia rzeczy i korzystania z list.
(define s (hi,there))
nie jest prawidłową rakietą.
Powodem jest przecinek w środku jest to, że plik, który parsuję używa go do oddzielenia wielu rzeczy i chcę użyć dopasowania Racket do parsowania pliku (w rzeczywistości bardziej zainteresowani, gdy znalazłem przecinek jest tak wyjątkowy w Racket!) Ale dzięki za odpowiedzi od was) –
Myślę, że możesz być zdezorientowany tym, gdzie potrzebujesz przecinków. W Racket nie używa się przecinków do oddzielania elementów na liście. Zamiast tego wystarczy użyć spacji. Powiedz mi, czy to źle, ale wyobrażam sobie, że próbujesz dopasować wyrażenie takie jak (define s '(hi there))
. Aby to zrobić, należy użyć
(match s
[`(,h ,t) ...])
Następnie w obszarze, gdzie elips jest zmienna h
ma wartość 'hi
, a zmienna t
ma wartość 'there
Po prostu chcę skorzystać z 'match' w Racket, aby parsować ten format s-expression-like z COMMA wewnątrz nawiasów. –
- 1. sed tylko zastępując ostatnie wystąpienie meczu - trzeba dopasować wszystkie
- 2. Jak wyświetlić wynik wiersza poleceń w Racket?
- 3. Jak uzyskać nazwę programu w Racket?
- 4. Jak mogę uzyskać podgrupy meczu w Scali?
- 5. Jak wybrać tylko określoną część w meczu?
- 6. niejawny w ciągu wzorca meczu
- 7. Racket: using wydarzenia w ramie okna%
- 8. Racket vs Scheme macros
- 9. Jak dopasować wykrzyknik (!) W PHP?
- 10. Równoległe prowadzenie kodu Racket
- 11. Hosting aplikacji internetowej Racket?
- 12. Wyrażenie regularne, aby zatrzymać w pierwszym meczu
- 13. Jak wysłać załącznik z wiadomością e-mail w Racket?
- 14. Szukaj częściowego meczu wartości w tablicy
- 15. Missing ostrzeżenie niewyczerpującym meczu
- 16. nowa linia na schemacie (Racket)
- 17. wyrażenie regularne dla meczu wszystkie słowa bez numerów
- 18. Wykluczenie ostatniego znaku regex meczu
- 19. Game Center Wyszukiwanie meczu Programowo
- 20. Jak dopasować wiele atomów w Erlangu?
- 21. Jak dopasować początek linii w leeksie?
- 22. Jak mogę dopasować formanty w zmienionym formularzu?
- 23. Jak dopasować na prefiksie w Elasticsearch
- 24. Jak dopasować typ danych w Rust?
- 25. Jak dopasować poziomą elipsę (...) w php
- 26. Jak dopasować adres URL w języku C#?
- 27. Jak dopasować wzór na typowy w Scali?
- 28. Jak mogę dopasować znaki akcentowane w preg_match()?
- 29. Regex: jak dopasować ostatnią kropkę w ciąg
- 30. Jak prawidłowo dopasować varargs w Mockito
wybaczyć niechciany komentarz, ale wydaje mi się, że użycie "dopasowania" rakietowego do analizy danych wejściowych, które zawiera przecinki, prawdopodobnie nie jest świetnym pomysłem; chyba że reszta wejścia jest naprawdę bardzo bliska rakietom/LISP-owi, brzmi to jak przypadek gryzienia pocisku i używania rzeczywistego parsera. Przepraszam z góry, jeśli źle zrozumiałem twój przypadek użycia. –
@JohnClements Myślę, że masz rację ... i historia jest taka, że mój główny program jest napisany w Racket i chcę tylko uzyskać struktury danych zbudowane z analizy pliku w Racket. Plik wygląda prawie jak S-Exp, a potem do późna znalazłem przecinki ... –
Czy masz jakieś specyfikacje, jakie formy mogą wystąpić w pliku źródłowym? Czy plik źródłowy jest napisany w jakimś dobrze znanym języku? –