我是Haskell的新手,并试图摆弄我通常在现实世界中遇到的一些测试案例。说我有文本文件“foo.txt的”,它包含以下内容:神秘的单词(“LPS”)出现在Haskell输出列表中
45.4 34.3 377.8
33.2 98.4 456.7
99.1 44.2 395.3
我试图产生输出
[[45.4,34.3,377.8],[33.2,98.4,456.7],[99.1,44.2,395.3]]
我的代码是下面,但我发现了一些假的“ LPS“在输出中...不知道它代表什么。
import qualified Data.ByteString.Lazy.Char8 as BStr
import qualified Data.Map as Map
readDatafile = (map (BStr.words) . BStr.lines)
testFunc path = do
contents <- BStr.readFile path
print (readDatafile contents)
当testFunc invocated “foo.txt的”输出
[[LPS ["45.4"],LPS ["34.3"],LPS ["377.8"]],[LPS ["33.2"],LPS ["98.4"],LPS ["456.7"]],[LPS ["99.1"],LPS ["44.2"],LPS ["395.3"]]]
任何帮助表示赞赏!谢谢。 PS:使用ByteString将来会在大量文件中使用。
编辑:
我也困惑的是,为什么输出列表被分组为上述(在[]结合的每个号码)中,当在ghci中下面的线给出了不同的布局研究。
*Main> (map words . lines) "45.4 34.3 377.8\n33.2 98.4 456.7\n99.1 44.2 395.3"
[["45.4","34.3","377.8"],["33.2","98.4","456.7"],["99.1","44.2","395.3"]]
是的,我开始认为这与懒惰评估有关。然而,我可以像对待其他任何人一样对待这个列表吗? – jparanich 2009-08-31 20:18:44
我这么认为 - 我的理解是,这只是另一种内部表示,你不应该(大部分)担心。不过,我不太了解Haskell。如果你开始看到不可思议的东西,请不要忘记这一点。 – 2009-08-31 20:22:46