27 Mart 2014, PERŞEMBE
Neden Haskell&; 7e7" "okumak için açılamıyor ama&; 7a7" okumak" mümkün.
Bunu deneyin:
Prelude> reads "7a7" :: [(Int, String)]
[(7,"a7")]
Prelude> reads "7e7" :: [(Int, String)]
[]
Ortada olası tüm karakterler için bu test. Onlar 'e'
hariç. Int
için soruyorum çünkü eğer Haskell bilimsel gösterim sayısı yorumlamaya çalışır gibi görünüyor, ama değil.
Bana bir hata gibi görünüyor.
CEVAP
27 Mart 2014, PERŞEMBE
DZD gerçekten adamcağız. Numeric.readSigned
uygulaması aşağıdakileri kullanır:
read'' r = do
(str,s) <- lex r
(n,"") <- readPos str
return (n,s)
lex
arama herhangi bir lexeme ayrıştırmak için çalışacağız, ve bu" [("7e7", "")]
, çünkü "7e7" kayan nokta değişmez. bütün bir lexeme mı verir "7e7 için anlamına gelir Sonra çalışır bir tam ayrıştırmak readPos
, Bu durumda bir değişken için hangi Numeric.readDec
geçti readDec
verim, düzgün, [(7, "e7")]
dizesi "7e7". (n, "")
karşı desen eşleştirme başarısız olur ve []
olarak bulur.
Bendüşünüyorumaşağıdaki gibi basit olmalıdır
read'' = readPos
Bunu Paylaş:
Neden almak ve sertifika deposunda bil...
Neden Haskell's "hiçbir şey ...
Haskell: yardımcı fonksiyon adı neden ...
Neden Haskell (bazen) olarak adlandırı...
Neden minimalist, örnek Haskell quicks...