乘法5 * -3
在haskell gchi 中给了我和错误。但是乘以 5 * (-3)
工作正常。为什么需要括号?
$ ghci
GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 5 * -3
<interactive>:2:1:
Precedence parsing error
cannot mix `*' [infixl 7] and prefix `-' [infixl 6] in the same infix expression
Prelude> 5 * (-3)
-15
Prelude>
最佳答案
因为unary minus运算符在 Haskell 中指定。不幸的是,这有点神奇。这是语言规范的一个奇怪的角落。
一元减号是该语言中唯一的一元运算符。支持一元减号语法只是为了支持 negate
的语法糖。功能。
一方面,这让我们可以制作 - 7
与 -7
相同.另一方面,它破坏了其他东西,比如部分语法。
如您所见,在编写混合固定表达式时会造成混淆。
negate的使用需要括号括起来,如下:
5 * (-3)
关于haskell - 为什么在没有括号的情况下不可能在haskell中乘以负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26073878/