为什么**&引用;不比OCaml中的否定结合得更紧密吗?

为什么**&引用;不比OCaml中的否定结合得更紧密吗?,ocaml,Ocaml,之后,我不知道该怎么想 在OCaml中,如果您执行类似于-1.0**2.0的操作(因为键入时需要使用float),那么您将获得1.00。根据,结果应该是-1(如python中所示) 我无法在OCaml中找到运算符优先级的原因或明确定义 这是因为类型系统吗?或者下面有一个pow绑定的事实?正如你引用的那页所说,“一元运算符− (通常读作“减号”)acts通常是有问题的。”——它引用Excel和bc作为它与O'CAML具有相同的优先级,但也表示“在书面或印刷数学中”它与Python一样工作。因此,本

之后,我不知道该怎么想

在OCaml中,如果您执行类似于-1.0**2.0的操作(因为键入时需要使用float),那么您将获得1.00。根据,结果应该是-1(如python中所示)

我无法在OCaml中找到运算符优先级的原因或明确定义


这是因为类型系统吗?或者下面有一个pow绑定的事实?

正如你引用的那页所说,“一元运算符− (通常读作“减号”)acts通常是有问题的。”——它引用Excel和bc作为它与O'CAML具有相同的优先级,但也表示“在书面或印刷数学中”它与Python一样工作。因此,本质上,在这个特定问题上没有普遍的共识。

运算符优先级是OCaml中的语法指导,这意味着函数标识符的第一个字符(以及它是一元还是二进制)根据固定序列确定运算符优先级。与Haskell这样的语言相比,在Haskell这样的语言中,可以在函数定义中指定运算符优先级,而不管使用哪些字符来形成函数标识符。

这并不总是正确的,也与问题无关。例如,**的优先级高于*,即使它们以相同的字符开头;一元减号的优先级高于减法,即使它们使用相同的字符。事实上,OP的问题是,在OCaml中,一元负号的优先级实际上高于乘法和幂运算;如果您假设一元减法与减法具有相同的优先级,则无法得出该值。OCaml手册第6.7节提供了运算符优先级表。所有二进制运算符的优先级都低于一元运算符(记录、数组和字符串投影二进制运算符除外)。为了获得算术运算的标准顺序,并且仍然允许程序员定义自己的运算符,OCaml将需要一些它没有的额外语言特性,并且运算符将不再是语法导向的。