¿Hay una forma estándar de dividir una cadena en Haskell?
lines
y words
funciona muy bien al dividir en un espacio o en una nueva línea, pero ¿seguramente hay una forma estándar de dividir en una coma?
No pude encontrarlo en Hoogle.
Para ser específico, estoy buscando algo donde split "," "my,comma,separated,list"
regrese ["my","comma","separated","list"]
.
Data.List
o inclusoPrelude
. Es tan común y desagradable si no está disponible para el golf de código.Respuestas:
Hay un paquete para esto llamado split .
Úselo así:
Viene con muchas otras funciones para dividir en delimitadores coincidentes o tener varios delimitadores.
fuente
split
función que responda a todas las necesidades, realmente necesita ese tipo de paquete.split
a labuild-depends
lista en su archivo cabal, por ejemplo, si su proyecto se llama hola, entonces en elhello.cabal
archivo debajo de laexecutable hello
línea coloque una línea como `build-depend: base, split` (observe dos sangrías de espacio). Luego construya usando elcabal build
comando. Cf. haskell.org/cabal/users-guide/…¡Recuerde que puede buscar la definición de las funciones de Preludio!
http://www.haskell.org/onlinereport/standard-prelude.html
Mirando allí, la definición de
words
es,Entonces, cámbielo por una función que tome un predicado:
¡Entonces llámalo con el predicado que quieras!
fuente
Si usa Data.Text, hay splitOn:
http://hackage.haskell.org/packages/archive/text/0.11.2.0/doc/html/Data-Text.html#v:splitOn
Esto está construido en la plataforma Haskell.
Entonces, por ejemplo:
o:
fuente
text
paquete o instalarlo. Sin embargo, pertenecería a otra pregunta.En el módulo Text.Regex (parte de la plataforma Haskell), hay una función:
que divide una cadena basada en una expresión regular. La API se puede encontrar en Hackage .
fuente
Could not find module ‘Text.Regex’ Perhaps you meant Text.Read (from base-4.10.1.0)
Uso
Data.List.Split
, que usasplit
:fuente
Prueba este:
Solo funciona para un solo personaje, pero debe ser fácilmente extensible.
fuente
Sin importar nada una sustitución directa de un personaje por un espacio, el separador de destino para
words
es un espacio. Algo como:o
Puede convertir esto en una función con parámetros. Puede eliminar el parámetro carácter para que coincida con mi coincidencia, como en:
fuente
P.ej
Se eliminará un solo delimitador final:
fuente
Empecé a aprender Haskell ayer, así que corrígeme si me equivoco pero:
da:
o tal vez quisiste
cuál podría ser:
fuente
split
lenguaje incorporado , que se estropeaba con idiomas con bibliotecas bien desarrolladas. Pero gracias de todos modos.No sé cómo agregar un comentario a la respuesta de Steve, pero me gustaría recomendar la
documentación de las bibliotecas de GHC ,
y allí específicamente las
funciones Sublist en Data.List
Lo cual es mucho mejor como referencia, que simplemente leer el informe simple de Haskell.
Genéricamente, un pliegue con una regla sobre cuándo crear una nueva sublista para alimentar, también debería resolverlo.
fuente
Además de las funciones eficientes y predefinidas que figuran en las respuestas, agregaré las mías, que son simplemente parte de mi repertorio de funciones de Haskell que estaba escribiendo para aprender el idioma en mi propio tiempo:
Las soluciones son al menos recursivas de cola para que no incurran en un desbordamiento de pila.
fuente
Ejemplo en el ghci:
fuente
ghci
?Encuentro esto más simple de entender:
fuente