嗨,大家好,
我正在解析一个看起来像这样的文本文件:
114.474998474121 15.7440004348755 25.806999206543 -873 172 182 188
114.46199798584 15.7419996261597 25.8799991607666 -1396 180 192 205
Run Code Online (Sandbox Code Playgroud)
并希望它可以这样读:
[[114.475,15.744,25.807,-873.0,172.0,182.0,188.0],
[114.462,15.742,25.88,-1396.0,180.0,192.0,205.0]]
Run Code Online (Sandbox Code Playgroud)
目前我的文本解析代码没有给出.这是我的代码:
main = do
text <- readFile "mytext.txt"
let
pcVal = map read (words text) :: [Float]
print pcVal
return ()
Run Code Online (Sandbox Code Playgroud)
此代码将所有文本解析为单个列表,如下所示:
[114.475,15.744,25.807,-873.0,172.0,182.0,188.0,
114.462,15.742,25.88,-1396.0,180.0,192.0,205.0]
Run Code Online (Sandbox Code Playgroud)
我找不到如何将整行(在文本文件中)作为列表,并将第二行作为另一个列表直到文件末尾.感谢有人有这方面的经验.谢谢.
我只是想知道,对于递归示例:
squaresRec :: [Double] -> [Double]
squaresRec [] = []
squaresRec (x:xs) = x*x : squaresRec xs
Run Code Online (Sandbox Code Playgroud)
为什么在递归的情况下,没有括号?不应该假设是这样的:
squaresRec :: [Double] -> [Double]
squaresRec [] = []
squaresRec [x:xs] = x*x : squaresRec xs
Run Code Online (Sandbox Code Playgroud)
我知道这不行.但只是想知道背后的解释.
这是我的代码:
data = [1,2,3,4,5,6,7,8,9,10]
cak' [] = []
cak' (x:xs) =
if x >= 2 then
cak' (x - 2) : cak' (xs)
else
x : cak' (xs)
run = cak' data
Run Code Online (Sandbox Code Playgroud)
它不会工作,直到我改变cak' (x - 2) : cak' (xs)来cak' $ x - 2 : cak' (xs).为什么它会产生这样的影响?