Определяется по первому символу оператора.Из руководства :
infix-symbol ::= (= ∣ < ∣ > ∣ @ ∣ ^ ∣ | ∣ & ∣ + ∣ - ∣ * ∣ / ∣ $ ∣ %) { operator-char }
∣ # { operator-char }+
prefix-symbol ::= ! { operator-char }
∣ (? ∣ ~) { operator-char }+
operator-char ::= ! ∣ $ ∣ % ∣ & ∣ * ∣ + ∣ - ∣ . ∣ / ∣ : ∣ < ∣ = ∣ > ∣ ? ∣ @ ∣ ^ ∣ | ∣ ~
Так, например, пользовательский оператор, определенный следующим образом:
let (@?) a b = ...
будет считаться инфиксным оператором, поскольку он начинается с@
, тогда как
let (?@) a b = ...
является префиксным оператором, поскольку он начинается с ?
.
Существуют некоторые дополнения и исключения, однако, описанные в руководствездесь :
mod
, land
, lor
, lxor
, lsl
, lsr
и asr
- ключевые слова, рассматриваемые как инфиксные операторы(например, 2 mod 4
).
-
и -.
могут интерпретироваться как инфиксные или префиксные операторы.Когда префикс thay переводится в ~-
и ~-.
соответственно.
&&
и ||
также рассматриваются по специальным причинам.См. Комментарии @octachron ниже для более подробного объяснения.
Наконец, вы также можете рассмотреть приоритет и ассоциативность, которые перечислены в таблице вверху, перед первым разделом здесь