Каковы официальные названия для инфиксных операторов?
Кажется, что существует ряд символов, которые могут действовать как инфиксные операторы; например
- Интс:
(+)
,(-)
,(*)
,(/)
,mod
- поплавки:
(+.)
,(-.)
,(*.)
,(/.)
- Сравнение:
(=)
,(<>)
,(<)
,(<=)
,(>)
,(>=)
- функции:
(|>)
,(<<)
,(>>)
- монады:
(>>=)
,(>>|)
- списки:
(::)
,(@)
- разное:
(^)
,(^/)
,(^:)
Что определяет, может ли функция действовать как инфиксный оператор или нет?
1 ответ
Это определяется первым символом оператора. Из руководства:
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 ниже для более подробного объяснения.
Наконец, вы также можете рассмотреть приоритет и ассоциативность, которые перечислены в таблице в верхней части, перед первым разделом здесь