2011-04-15 23 views
5

Duplicar posible:
convert string list to int list in haskellcadena Haskell a la lista

Hola,

tengo una cadena "12345". ¿Cómo puedo mostrarlo en forma de lista como [1,2,3,4,5]? Y también, ¿y si tengo una cadena como "## %%"? No puedo convertirlo a int. ¿Cómo puede verse en la forma [#, #,%,%]?

+2

Estos no son duplicados. Uno está convirtiendo una cadena en una lista, el otro está convirtiendo una lista de cadenas en una lista. – Scott

+0

En Haskell "12345" ES de hecho ['1', '2', '3', '4', '5']. ¿Es eso lo que quieres o es ["1", "2", "3", "4", "5"]? –

Respuesta

7

uso intersperse

myShow :: String -> String 
myShow s = concat ["[", intersperse ',' s, "]"] 
9
import Data.Char (digitToInt) 

map digitToInt "12345" 
+1

Thx, aprendí algo nuevo. – markmywords

+2

¿Qué pasa si no tengo dígitos? – thetux4

3

¿Ha echado un vistazo a esta respuesta? Convert string list to int list

Una cadena es simplemente una lista de caracteres en Haskell después de todo. :)

+0

Lo comprobé, pero cuando trato de convertir una cadena como "&%" da error de análisis. – thetux4

5

Debe correlacionar la función de lectura x :: Int a cada uno de los elementos de la cadena como una lista de caracteres:

map (\x -> read [x]::Int) "1234" 

Si tiene caracteres que no sean dígitos que debe filtrar en primer lugar como esto:

import Data.Char 
map (\x -> read [x]::Int) (filter (\x -> isDigit x) "1234##56") 

que se traduce en:

[1,2,3,4,5,6] 
+0

Esto funciona, pero ¿y si tengo una cadena como "## %%"? – thetux4

+0

Esto cuenta que la cadena está compuesta por dígitos. Si desea filtrar los caracteres que no son dígitos, debe usar un filtro. Editaré la respuesta –

+0

Cambié mi pregunta también. En realidad, no quiero dividir los no elegibles. Quiero verlos en forma de lista. – thetux4