Haskell 如果条件抛出错误,为什么下面的数字为负数?
我正在看Pluralsight中的“Haskell基础知识第一部分”。在第二章中,作者展示了一个非常简单的函数,其中包含if。当我尝试它时,每当我尝试带负数的函数时,我都会出错。下面是函数Haskell 如果条件抛出错误,为什么下面的数字为负数?,haskell,Haskell,我正在看Pluralsight中的“Haskell基础知识第一部分”。在第二章中,作者展示了一个非常简单的函数,其中包含if。当我尝试它时,每当我尝试带负数的函数时,我都会出错。下面是函数 posOrNeg x = if x >= 0 then "Positive" else "Negative" 当我尝试使用正数的方法时,效果很好,但当我使用负数调用该方法时,winGHCi抛出以下错误。 “没有因使用“打印”而产生的(Show(a0->[Char]))”是否比
posOrNeg x =
if x >= 0
then "Positive"
else "Negative"
当我尝试使用正数的方法时,效果很好,但当我使用负数调用该方法时,winGHCi抛出以下错误。“没有因使用“打印”而产生的(Show(a0->[Char]))”
是否比这里的函数更重要 当将同一函数应用于同一类型的正数时,将该函数应用于负数不会出现类型错误
在没有看到代码的情况下,最有可能的解释是您编写了类似于
posOrNeg-42
,这与posOrNeg-42
相同,并尝试从posOrNeg
中减去42(当然,这是不可能的,因为您不能从函数中减去数字)。将函数应用于负数的正确语法是posOrNeg(-42)
,数字周围有括号,因此无法将-
解析为中缀运算符。是的,我没有在括号中传递负数。我以前不知道有什么不同。这是有道理的。请注意,使用-XNegativeLiterals
,您可以执行posOrNeg-42
(但不能执行posOrNeg-42
)。有时使用否定
会更容易一些,这取决于具体情况