所以我正在制作一个程序来显示所选元素的组合原子质量。以下是我的代码片段:
start :: Integer -> [Double] -> IO()
start num empty =
if num /= 0
then do
putStrLn "Term:"
term <- getLine
let atom = element term
putStrLn "Subscript:"
subscript <- getLine
let sub = convertToDouble subscript
let add_element = atom * sub
let empty = add_element : empty
putStrLn "Done"
start (num - 1) empty
else
putStrLn . show $ empty
每当我运行它并将0作为num传递时,它就能完美运行。但是当我传递任何其他数字作为参数时,它会创建一个无限循环并反复显示相同的值。
答案 0 :(得分:4)
let empty = add_element : empty
它定义了重复add_element
的无限列表。由于let
始终是递归的,因此请使用其他名称。
let notempty = add_element : empty