【发布时间】:2020-03-28 17:14:55
【问题描述】:
我尝试编写一个 Haskell 函数来递归地确定列表是否在任意值之下。由于某种原因,代码未编译。我的错误如下。
--declare function
checkIfExpensive :: [Float] -> Float -> String
--base case
checkIfExpensive [] x = "You have enough money"
checkIfExpensive list x = if x > 20
--recursive case
then "You don't have enough money"
else checkIfExpensive (init list) (last list + x)
编辑:通过将“tail”切换到“last”来编译代码。但是,现在我每次运行代码时似乎都会遇到不同的错误。
下面是一些错误的样子
*Main> checkIfExpensive [5,5,5] 0
<interactive>:1:1: error: Data constructor not in scope: Ixve5
*Main> checkIfExpensive [1,1,1] 0
<interactive>:1:1: error: Variable not in scope: cpe
Prelude>
【问题讨论】:
-
您确定输入的内容完全符合您的意图吗?正如您所说,考虑到您的预期输入,这些错误毫无意义 - 但它抱怨的变量名是按顺序由预期输入中的字符组成的。所以这几乎就像你的键盘坏了,缺少一些字符不显示? (但是我不知道你是如何输入你的帖子的,包括示例 GHCi 会话......)
-
您无法从此命令中得到这些错误。如果您的程序中有一些不在范围内的内容,它会在加载程序时显示,而不是在您键入命令时显示。