Saltar al contenido

¿Cómo dividir una cadena en Haskell?

Solución:

Recuerde que puede buscar la definición de funciones de Prelude.

http://www.haskell.org/onlinereport/standard-prelude.html

Mirando allí, la definición de words es,

words   :: String -> [String]
words s =  case dropWhile Char.isSpace s of
                      "" -> []
                      s' -> w : words s''
                            where (w, s'') = break Char.isSpace s'

Entonces, cámbielo por una función que tome un predicado:

wordsWhen     :: (Char -> Bool) -> String -> [String]
wordsWhen p s =  case dropWhile p s of
                      "" -> []
                      s' -> w : wordsWhen p s''
                            where (w, s'') = break p s'

¡Entonces llámalo con el predicado que quieras!

main = print $ wordsWhen (==',') "break,this,string,at,commas"

Hay un paquete para esto llamado split.

cabal install split

Úselo así:

ghci> import Data.List.Split
ghci> splitOn "," "my,comma,separated,list"
["my","comma","separated","list"]

Viene con muchas otras funciones para dividir en delimitadores coincidentes o tener varios delimitadores.

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á integrado en la plataforma Haskell.

Entonces, por ejemplo:

import qualified Data.Text as T
main = print $ T.splitOn (T.pack " ") (T.pack "this is a test")

o:

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.Text as T
main = print $ T.splitOn " " "this is a test"
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *