2011-11-13 25 views
8

Sto provando a scrivere una funzione per accettare una stringa di 4 numeri separati da spazi bianchi in una stringa, separarli e convertirli in numeri interi, e posizionarli in 4 variabili intere individuali. So che posso usare splitWs per dividerli in una matrice di stringhe, utilizzare !! per accedere ai singoli elementi, e qualcosa di simile a quanto segue per convertire a intero:Convertire stringa di numeri separati da spazi bianchi in una stringa in numeri interi e inserirli in variabili

f :: [String] -> [Int] 
f = map read 

Ma io non riesco a capire come mettere tutti insieme.

risposta

0

Non ci sono variabili in Haskell, in Haskell le stringhe sono rappresentate come liste. Così

prova:

import Data.List.Utils 
nums=map read $split " " "1 2 3 4" :: [Int] 

È possibile accedere agli elementi singoli con (!!):

> nums(!!)0 
1 

HTH Chris

+0

perché non usare 'splitWs' invece di' split "" '? – nimi

+5

Perché non usare ['words'] (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v%3awords) anziché uno? –

+0

'!!' è inefficiente rispetto alla corrispondenza del modello a causa di 4 traversamenti di liste vs 1 – nponeccop

12

Utilizzare la funzione words per dividere la stringa da spazi bianchi. Quindi puoi map read sul risultato.

Quindi, una semplice implementazione potrebbe essere:

readNumbers :: String -> [Int] 
readNumbers = map read . words 

Quindi, se avete bisogno di esattamente quattro numeri, l'uso pattern matching:

case readNumbers string of 
    [a,b,c,d] -> ... 
    _   -> error "Expected four numbers" 
Problemi correlati