si tengo algo como esto (define s (hi,there))
entonces ¿cómo puedo escribir en el partido como (match s [(,h , ,t)] ...)
Pero no está funcionando, porque necesita la match
,
así que ¿cómo puedo hacer esto?¿Cómo hacer coincidir, en coincidencia en raqueta?
Respuesta
Primero tenga en cuenta que la coma ,
es una abreviatura de lector especial. (hi,there)
es leído como (hi (unquote there))
. Esto es difícil de detectar, ya que la impresora predeterminada imprime listas cuyo primer elemento es un unquote
de una manera especial.
Welcome to DrRacket, version 5.3.0.14--2012-07-24(f8f24ff2/d) [3m].
Language: racket.
> (list 'hi (list 'unquote 'there))
'(hi ,there)
Por lo tanto, el patrón que necesita es '(list h (list' unquote t)) '.
> (define s '(hi,there))
> (match s [(list h (list 'unquote t)) (list h t)])
(list 'hi 'there)
Utilice una barra invertida si desea usar una coma como un símbolo dentro de una sección citado:
> (define s '(hi \, there))
> (match s [(list h c t) (symbol->string c)])
","
Y el uso de '|,|
para el símbolo de coma independiente.
> (match s [(list h '|,| t) (list h t)])
'(hi there)
En cualquier caso, debería utilizar los espacios en blanco para separar cosas y usar listas.
(define s (hi,there))
no es válido Racket.
La razón por la que hay una coma adentro es que el archivo que estoy analizando lo usa para separar muchas cosas y quiero usar Racket Match para analizar el archivo (en realidad me interesa más cuando encuentro ¡la coma es tan especial en Racket!) Pero gracias por las respuestas de ustedes, muchachos) –
Creo que puede estar confundido acerca de dónde necesita las comas. En Racket, no usa comas para separar elementos en una lista. En cambio, solo usa espacios en blanco. Dime si esto está mal, pero lo que imagino es que estás tratando de hacer coincidir una expresión como (define s '(hi there))
. Para ello, se utilizaría
(match s
[`(,h ,t) ...])
A continuación, en la zona donde las elipses es, la variable h
tiene el valor 'hi
, y la variable t
tiene el valor 'there
Solo quiero aprovechar el 'match' en Racket para analizar ese formato de s-expression WITH COMMA dentro de paréntesis. –
- 1. ¿Cómo hacer coincidir la URL en C#?
- 2. ¿Cómo hacer coincidir los subdirectorios en RewriteCond?
- 3. Cómo hacer coincidencia de patrones en Common Lisp
- 4. ¿Cómo hacer coincidir la similitud de textura en las imágenes?
- 5. Regex: cómo hacer coincidir el último punto en una cadena
- 6. ¿Cómo puedo hacer coincidir contra varias expresiones regulares en Perl?
- 7. patrón condicional a juego en la raqueta
- 8. Generar HTML en Raqueta
- 9. Cómo hacer coincidir texto en cadena en Arduino
- 10. ¿Cómo hacer coincidir un carácter en MySQL en lugar de%?
- 11. Cómo evaluar cadenas en la raqueta
- 12. Coincidencia de patrón con estrella Kleene en el tipo de estructura en Raqueta
- 13. Fijaciones POST/GET en Raqueta
- 14. Cómo hacer coincidir int a enum
- 15. jQuery hacer coincidir múltiples clases
- 16. Regex cómo hacer coincidir un carácter opcional
- 17. ¿Cómo hacer coincidir todas las ubicaciones en nginx, para auth?
- 18. Regex: cómo hacer coincidir todo excepto un patrón en particular
- 19. ¿Cómo hacer coincidir solo los últimos registros actualizados en Doctrine?
- 20. ¿Cómo hacer coincidir un diccionario vacío en Javascript?
- 21. ¿Cómo hacer coincidir patrones con una clase anidada en Scala?
- 22. ¿Cómo hacer coincidir y ordenar por similitud en MySQL?
- 23. Cómo hacer coincidir cadenas "múltiples" exactas en Python
- 24. Cómo hacer coincidir varias palabras en la expresión regular
- 25. Cómo hacer coincidir ets: partido contra un registro en Erlang?
- 26. Cómo hacer coincidir una comilla simple en sed
- 27. Regex: cómo hacer coincidir todo excepto un patrón en particular
- 28. Cómo hacer coincidir el signo de exclamación (!) En PHP?
- 29. ¿Cómo hacer coincidir un Spring @RequestMapping con @pathVariable que contiene "/"?
- 30. sed solo reemplazando la última coincidencia de coincidencia - necesidad de coincidir con todos
perdonéis los comentarios no solicitados, pero me parece que usar la 'coincidencia' de la raqueta para analizar la entrada que contiene comas probablemente no sea una gran idea; a menos que el resto de la entrada esté realmente muy cerca de la raqueta/LISP, esto suena como un caso para morder la bala y usar un analizador real. Disculpas de antemano si he entendido mal tu caso de uso. –
@JohnClements Creo que tienes razón ... y la historia es que mi programa principal está escrito en Racket y solo quiero que las estructuras de datos compiladas analicen el archivo en Racket. El archivo casi se ve como S-Exp, y hasta muy tarde, encontré que había comas ... –
¿Tiene algún tipo de especificación de qué formularios pueden aparecer en el archivo fuente? ¿El archivo fuente está escrito en algún idioma conocido? –