Все дело в том, как синтаксический анализатор уделяет приоритетное внимание различным синтаксическим параметрам, чтобы избежать двусмысленности.
+
является и двоичным оператором сложения, и унарным «положительным» Оператор 1. Таким образом, 5 + b
является дополнением к двум аргументам; но +b
- положительный оператор, применяемый к некоторому символу b
.
Так
let ab a b = a 5 + b
анализируется как:
let ab a b = (a 5) + b
с a
является функцией одного целого аргумента, возвращающего Int поэтому он может быть добавлен к b
; но
let ab2 a b = a 5 +b
обрабатывается как:
let ab2 a b = a (5) (+b)
с a
является функцией двух аргументов, не имея возможности определить тип он возвращается.
У меня нет списка операторов F #, поэтому вы не можете проверить правильное имя. Изменить: похоже, я не мог правильно запомнить: Arithmetic Operators (F#) :-).
В выражении '+ b' символ' + 'интерпретируется как [унарный оператор] (https://en.wikipedia.org/wiki/Unary_operation) (принимающий только' b' в качестве аргумента). – Glorfindel