haskell - 为什么在没有括号的情况下不可能在haskell中乘以负数

标签 haskell syntax

乘法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/

相关文章:

netbeans - NetBeans 是否有 Mustache 语法荧光笔或插件?

python - :-1 mean in python? 是什么意思

syntax - 变量声明后转到字符串

c++ - 在C++中,a = 5,a(5),a {5}和a [5]有什么区别?

haskell - cabal 错误 : Could not find module `GHC.TypeLits' . 如何修复此问题?

haskell - 斐波那契函数正确性的归纳证明

haskell 递归 : interleave function in Programming in Haskell ch. 11

haskell - 如何创建在一定范围内有界的类型

class - 我的 Parser 类的类型有什么问题?

Java 比较器语法可以工作,但为什么呢?