Обновить

Вам не кажется, что порядок агрументов в обратной польской записи нелогичен? Почему 5 - 3 в ОПЗ это 5 3 - а не 3 5 - ? Как частично применить аргумент к функции? Т.е. как сделать каррирование оператора - ? Надо применить к нему предпоследний элемент стека, т.е. стек должен состоять как минимум из двух элементов, а для частичного применения достаточно было бы, чтобы на стеке лежал только один элемент.

Конечно можно каррировить оператор не первым, а последним аргументом, т.е. частично применить 3 к - и получить функцию, которая на вход будет принимать число, и вычитать из него 3. Для оператора минус вроде всё логично. А давайте рассмотрим оператор map : (a -> b) -> List<a> если к нему частично применить некоторую функцию (a -> b), это имеет определённый смысл - мы получим функцию, к которой можно применять различные данные (списки), а если мы поступим наоборот и частично применим к map некоторый список, то мы получим довольное нелепую конструкцию - список данных, к которым можно применять разные функции.

Подозреваю, что Ян Лукасевич определил такой порядок, чтобы визуально арифметические операции выгладели похожими на привычную нам инфикцную запись, но для более сложных функций, чем арифметические операторы такой порядок вызывает некоторые неудобства.

Теги:
+2
Комментарии10

Публикации

Ближайшие события