代码之家  ›  专栏  ›  技术社区  ›  Kevin Ji

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

  •  0
  • Kevin Ji  · 技术社区  · 6 年前

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

    • 英特斯: (+) , (-) , (*) , (/) , mod
    • 浮动: (+.) , (-.) , (*.) , (/.)
    • 比较: (=) , (<>) , (<) , (<=) , (>) , (>=)
    • 功能: (|>) , (<<) , (>>)
    • 单子: (>>=) , (>>|)
    • 清单: (::) , (@)
    • MISC: (^) , (^/) , (^:)

    什么决定函数是否可以作为中缀运算符?

    1 回复  |  直到 6 年前
        1
  •  3
  •   glennsl Namudon'tdie    6 年前

    它由操作员的第一个符号决定。从 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 :

    • mod , land , lor , lxor , lsl ,请 lsr asr 关键字是否被视为中缀运算符(例如 2 mod 4 )

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

    • && || 因为某些原因,也会受到特别对待。关于更多的解释,请参阅下面@ochtchron的评论。

    最后,您可能还需要考虑优先级和关联性,它们列在靠近顶部的表中, before the first section here