【发布时间】:2023-03-24 21:07:01
【问题描述】:
所以我正在尝试制作一个小程序,它可以接收在实验期间捕获的数据,并且在大多数情况下,我想我已经弄清楚了如何递归地接收数据,直到用户发出信号为止,但是,在终止数据采集时,haskell 会抛出 Exception: <<loop>>,我真的不知道为什么。代码如下:
readData :: (Num a, Read a) => [Point a] -> IO [Point a]
readData l = do putStr "Enter Point (x,y,<e>) or (d)one: "
entered <- getLine
if (entered == "d" || entered == "done")
then return l
else do let l = addPoint l entered
nl <- readData l
return nl
addPoint :: (Num a, Read a) => [Point a] -> String -> [Point a]
addPoint l s = l ++ [Point (dataList !! 0) (dataList !! 1) (dataList !! 2)]
where dataList = (map read $ checkInputData . splitOn "," $ s) :: (Read a) => [a]
checkInputData :: [String] -> [String]
checkInputData xs
| length xs < 2 = ["0","0","0"]
| length xs < 3 = (xs ++ ["0"])
| length xs == 3 = xs
| length xs > 3 = ["0","0","0"]
据我所知,异常表明某处存在无限循环,但我无法弄清楚为什么会发生这种情况。据我所知,当输入“完成”时,当前级别应该简单地返回 l,它给出的列表,然后应该级联函数的先前迭代。
感谢您的帮助。 (是的,一旦我弄清楚如何做,checkInputData 将有适当的错误处理。)
【问题讨论】: