2012-01-16 24 views
6

Kullanıcı tarafından verilen bir sayıyı okuyan ve sonra onu yazdıran bir program yapmaya çalışıyorum. numara bunu yazdırırken bir tamsayı olmak zorunda, ama bu kod bana bir ayrıştırma hatası veriyor:Haskell bu kod için neden ayrıştırma hatası veriyor?

main = do 
{ 
     putStrLn "Please enter the number" 
     number <- getLine 
     putStrLn "The num is:" ++ show (read number:: Int) 
} 
+0

Asıl hata nedir? –

+0

3: 8: Desente ayrıştırma hatası: putStrLn –

+0

Bu benim de ilk sorumuydu, ancak kodu bakarak kolayca tahmin edebilirsiniz, bu yüzden tamamdır :) –

cevap

10

Eğer do açıklamada parantez kullanırsanız, noktalı virgül kullanmak zorunda.

main = do 
{ 
    putStrLn "Please enter the number"; 
    number <- getLine; 
    putStrLn $ "The num is:" ++ show (read number:: Int) 
} 

ya:: Ayrıca, son satırı Yani iki seçeneğiniz var

putStrLn $ "The num is:" ++ show (read number :: Int) olmalıdır

main = do 
    putStrLn "Please enter the number" 
    number <- getLine 
    putStrLn $ "The num is:" ++ show (read number:: Int) 

hemen hepsi gördüğüm Kodun ikinci versiyonunu kullanır, ancak onlar her ikisi de geçerlidir. İkinci versiyonda, boşlukların belirginleştiğini unutmayın.

+0

Bu sayıyı tamsayı olarak nasıl okuyabileceğimi söyler misiniz doğrudan ya da daha sonra nasıl dönüştürüleceğini –

+1

'getLine' yerine' readLn :: IO Int' kullanabilirsiniz. Bu kod parçasında, bir yeri belirtmeden bir sayı elde etmek için yeterli bilgi yoktur; Bununla gerçekten sayısal bir şeyler yaptıysanız, 'readLn' işlevini kendi başınıza kullanabileceksiniz. –

+0

kullanıcı girişlerini 10 düşünür ve sonra derleyici kullanıcıdan 10 sayı girmesini ve sonra bir liste oluşturmasını ister. Bu sıra kullanılarak nasıl yapılabilir? –

1

Haskell Sekme karakterini tanır ve programınız bunun nedeni ile başarısız olabilir. Sekmeler kullanıyorsanız, bunları boşluklara değiştirin.

+0

Bu genellikle sorun çıkarır, ancak sorun bu değildi. – dfeuer

İlgili konular