中缀运算符的法定名称是什么?

时间:2018-12-01 17:17:18

标签: ocaml infix-notation infix-operator

似乎有许多符号可以充当中缀运算符;例如

  • ints:(+)(-)(*)(/)mod
  • 浮动:(+.)(-.)(*.)(/.)
  • 比较:(=)(<>)(<)(<=)(>)(>=)
  • 功能:(|>)(<<)(>>)
  • 单子:(>>=)(>>|)
  • 列表:(::)(@)
  • 杂项:(^)(^/)(^:)

什么决定一个函数是否可以充当中缀运算符?

1 个答案:

答案 0 :(得分:3)

由运算符的第一个符号确定。来自the manual

infix-symbol    ::= (= ∣  < ∣  > ∣  @ ∣  ^ ∣  | ∣  & ∣  + ∣  - ∣  * ∣  / ∣  $ ∣  %) { operator-char }  
    ∣    # { operator-char }+  

prefix-symbol   ::= ! { operator-char }  
    ∣    (? ∣  ~) { operator-char }+  

operator-char   ::= ! ∣  $ ∣  % ∣  & ∣  * ∣  + ∣  - ∣  . ∣  / ∣  : ∣  < ∣  = ∣  > ∣  ? ∣  @ ∣  ^ ∣  | ∣  ~

例如,这样定义的自定义运算符:

let (@?) a b = ...

由于它以@开头,而

let (?@) a b = ...

是前缀运算符,因为它以?开头。

对此有一些补充和例外,但是in the manual here描述了:

  • modlandlorlxorlsllsrasr是关键字作为中缀运算符(例如2 mod 4)。

  • --.可以解释为中缀或前缀运算符。当前缀thay分别转换为~-~-.时。

  • 由于某些原因,
  • &&||也被特别对待。有关更多说明,请参见下面@octachron的评论。

最后,您可能还需要考虑优先级和关联性,这在顶部before the first section here

附近的表中列出