无限显示相同的值Haskell

时间:2018-03-11 00:43:06

标签: haskell infinite-loop

所以我正在制作一个程序来显示所选元素的组合原子质量。以下是我的代码片段:

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传递时,它就能完美运行。但是当我传递任何其他数字作为参数时,它会创建一个无限循环并反复显示相同的值。

1 个答案:

答案 0 :(得分:4)

let empty = add_element : empty

它定义了重复add_element的无限列表。由于let始终是递归的,因此请使用其他名称。

let notempty = add_element : empty