2011-11-13 22 views
8

Bir dize 4 boşluk ile ayrılmış sayı dizisini kabul etmek için bir işlev (ler) yazmayı deniyorum, ayrı ve tam sayılara dönüştür, ve bunları 4 ayrı tamsayı değişkenine yerleştirin. Ben bireysel unsurları erişmek için !! kullanın dize diziye onları bölmek için splitWs kullanabilirsiniz biliyoruz ve aşağıdaki gibi bir şey tamsayı dönüştürmek için:Bir dize içinde boşluk olarak ayrılmış sayı dizesini tam sayılara dönüştürün ve değişkenlere yerleştirin

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

Ama bunu koymak için nasıl bilemiyorum hep birlikte.

cevap

0

Haskell'de değişken yok, Haskell dizelerinde liste olarak temsil edilir. Yani

deneyin: boşluklarla dize bölmek

> nums(!!)0 
1 

HTH Chris

+0

neden 'kullanmayın splitWs' yerine' bölme "" nin '? – nimi

+5

Neden ['' '' (http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v%3awords) 'ı kullanmak yerine? –

+0

'!!', 4 liste geçişi vs 1 nedeniyle desen eşleşmesiyle karşılaştırıldığında etkisizdir – nponeccop

12

Kullanım words fonksiyonu:

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

Sen (!!) ile tek unsurlar erişebilirler. Sonra sonuç üzerinde map read yapabilirsiniz.

Böylece basit bir uygulama olacaktır:

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

Sonra tam olarak dört rakam, kullanım desen eşleştirme gerekirse:

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