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