我在输入“ else”上遇到解析错误,但不知道如何解决。我对这个haskell东西还是陌生的。

depot =
do
putStr ("Enter deposit amount: ")
deAmount <- getLine
let redeAmount = read deAmount
if redeAmount > 0 then
    let accBal = redeAmount + accBal
    else
        putStrLn "Please enter amount greater than 0"

最佳答案

第一个错误是do(及其后的所有内容)需要缩进。

下一个错误是,语法上let accBal = redeAmount + accBal不能那样独立。它后面必须紧跟in或必须直接在do块内(在if块内的do内不计算在内)。

但是,即使您修复了语法,它也不会做您想要的事情。您不能使用let重新分配变量。事实上,您根本无法重新分配变量。如果您修复了let的语法,它将仅创建一个新变量accBal,该变量将覆盖旧变量accBal。该新变量的范围将是thenif块。离开if块后,无论您在accBal内部进行了什么操作,您都会accBal再次引用if的旧值。

因此,要解决您的问题,您需要重组逻辑,因此它不依赖于重新分配accBal的情况。

10-06 10:32