2011-11-07 5 views

Respuesta

11

En Haskell, las cadenas son solo (me gustas) listas de caracteres; puede encontrar la línea

type String = [Char] 

en algún lugar de la fuente de cada implementación de Haskell. Eso hace que tareas como encontrar la primera ocurrencia de un cierto carácter (elemIndex 'a' mystring) o calcular la frecuencia de cada carácter (map (head &&& length) . group . sort) sean triviales.

Debido a esto, también puede usar la sintaxis habitual para listas con cadenas. En realidad, "foo" es solo azúcar para ['f','o','o'], que a su vez es solo azúcar para 'f' : 'o' : 'o' : []. Puedes emparejar patrones, mapearlos y doblarlos como quieras. Por ejemplo, si desea obtener el elemento en la posición n de mystring, puede usar mystring !! n, siempre que 0 <= n < length mystring.

+0

'map sum. grupo. sort' está mal escrito para cadenas. Quizás quisiste decir algo como 'map (head &&& length). grupo. ordenar'? – hammar

+0

@hammar: Gracias – fuz

+0

Digamos que pasé una cadena como parámetro de una función, ¿cómo accedería a cada char? usando el mapa? – user997112

6

El tipo string es solo alias para [Char] por lo que no necesita hacer nada.

Prelude> tail "Hello" 
"ello" 
Prelude> ['H', 'e', 'l', 'l', 'o'] 
"Hello" 
Prelude> "Hello" !! 4 
'o' 
10

Bueno, la pregunta qué dice que quiere una matriz:

import Data.Array 
stringToArray :: String -> Array 
stringToArray s = listArray (0, length s - 1) s 
+0

Esto es lo que vine buscando. De hecho, esta es la respuesta * correcta * a la pregunta, incluso si no era lo que el OP pretendía. – setholopolus

Cuestiones relacionadas