2011-11-07 15 views
9

E 'possibile che data una stringa potrei ottenere ogni carattere che compone quella stringa?Haskell ottiene l'array di caratteri dalla stringa?

+0

Sì. Penso che le stringhe siano una lista di caratteri in Haskell. –

+0

Cosa vuoi fare con i personaggi? –

+0

Sì, la funzione è chiamata 'id'. –

risposta

11

In Haskell, le stringhe sono solo (mi piace) elenchi di caratteri; puoi trovare la linea

type String = [Char] 

da qualche parte nella fonte di ogni implementazione Haskell. Ciò rende banali le operazioni come trovare la prima occorrenza di un determinato carattere (elemIndex 'a' mystring) o calcolare la frequenza di ciascun carattere (map (head &&& length) . group . sort).

Per questo motivo, è possibile utilizzare anche la sintassi normale per gli elenchi con stringhe. In realtà, "foo" è solo zucchero per ['f','o','o'], che a sua volta è solo zucchero per 'f' : 'o' : 'o' : []. Puoi modellare la corrispondenza, mappare e piegarli come preferisci. Ad esempio, se si desidera ottenere l'elemento nella posizione n di mystring, è possibile utilizzare mystring !! n, a condizione che sia 0 <= n < length mystring.

+0

'somma mappa. gruppo. sort' è mal digitato per le stringhe. Forse intendevi qualcosa come 'map (head &&& length). gruppo. sort'? – hammar

+0

@hammar: Grazie – fuz

+0

Quindi dire che ho passato una stringa come parametro per una funzione, come potrei effettivamente accedere a ogni char? usando la mappa? – user997112

6

Il tipo string è solo un alias per [Char] quindi non è necessario fare nulla.

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

Bene, la questione non dice che vuole un array:

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

Questo è quello che mi è venuto in cerca di. In realtà, questa è la * corretta * risposta alla domanda, anche se non era ciò che l'OP intendeva. – setholopolus

Problemi correlati