中缀运算符的合法名称是什么?
What are the legal names for infix operators?
似乎有许多符号可以充当中缀运算符;例如
- 整数:
(+)
、(-)
、(*)
、(/)
、mod
- 浮动:
(+.)
、(-.)
、(*.)
、(/.)
- 比较:
(=)
、(<>)
、(<)
、(<=)
、(>)
、(>=)
- 函数:
(|>)
、(<<)
、(>>)
- 单子:
(>>=)
、(>>|)
- 列表:
(::)
、(@)
- 杂项:
(^)
、(^/)
、(^:)
什么决定一个函数是否可以充当中缀运算符?
由运算符的第一个符号决定。来自 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分别被翻译成~-
和~-.
时。
&&
和 ||
也被特殊对待,这是有原因的。请参阅下面@octachron 的评论以获得更多解释。
最后,您可能还想考虑优先级和结合性,它们列在靠近顶部的 table 中,before the first section here
似乎有许多符号可以充当中缀运算符;例如
- 整数:
(+)
、(-)
、(*)
、(/)
、mod
- 浮动:
(+.)
、(-.)
、(*.)
、(/.)
- 比较:
(=)
、(<>)
、(<)
、(<=)
、(>)
、(>=)
- 函数:
(|>)
、(<<)
、(>>)
- 单子:
(>>=)
、(>>|)
- 列表:
(::)
、(@)
- 杂项:
(^)
、(^/)
、(^:)
什么决定一个函数是否可以充当中缀运算符?
由运算符的第一个符号决定。来自 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分别被翻译成~-
和~-.
时。&&
和||
也被特殊对待,这是有原因的。请参阅下面@octachron 的评论以获得更多解释。
最后,您可能还想考虑优先级和结合性,它们列在靠近顶部的 table 中,before the first section here