将浮点列表的字符串转换为Haskell中的浮点列表

时间:2018-11-27 03:26:42

标签: haskell

我正在尝试将包含浮点数的字符串转换为列表。基本上,我有一个列出了一系列数组的文本文件,而且我不知道如何在haskell中收集它们。

输入:

"[0.0, 21.05263157894737, 450.56721805219945, 450.5625302466032]
[0.0, 42.10526315789474, 350.6536813941797, 346.7624393708003]
[0.0, 189.47368421052633, 447.5003638411328, 352.12736129109106]
[0.0, 210.5263157894737, 351.9493076378216, 347.65906596838636]"

只是一小段字符串。

所需的输出:

[0.0, 21.05263157894737, 450.56721805219945, 450.5625302466032]
[0.0, 42.10526315789474, 350.6536813941797, 346.7624393708003]
[0.0, 189.47368421052633, 447.5003638411328, 352.12736129109106]
[0.0, 210.5263157894737, 351.9493076378216, 347.65906596838636]

全部作为列表。

我已经尝试过并转换字符,但是一切都已经崩溃了。

我只列出了所有值

main = do
   let args = "output.txt"
   content <- readFile (args)
   print(linesOfFiles)

任何输入表示赞赏。

1 个答案:

答案 0 :(得分:2)

由于文件的行由换行符分隔,因此可以使用lines函数将其转换为字符串列表。然后可以在该列表的每个元素上使用read函数:

readListOfFloats :: String -> [Float]
readListOfFloats = read

main = do
   let args = "output.txt"
   content <- readFile args
   print $ map readListOfFloats $ lines content

或者:

main = do
   let args = "output.txt"
   content <- readFile args
   print $ map (read :: String -> [Float]) $ lines content

只要显式指定了read函数的类型,这两个选项都将起作用。编译器无法推断出它,因为开发人员是唯一知道期望输入类型的开发人员。