Зачем нам нужен префикс, постфиксная запись - PullRequest
22 голосов
/ 27 сентября 2011

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

Ответы [ 4 ]

41 голосов
/ 27 сентября 2011

Инфиксная нотация легко читается для людей , тогда как нотация до / после префикса легче разбирается для машины.Большим преимуществом префикса / постфикса является то, что никогда не возникает таких вопросов, как приоритет оператора.

Например, рассмотрим выражение инфикса 1 # 2 $ 3.Теперь мы не знаем, что означают эти операторы, поэтому существует два возможных соответствующих постфиксных выражения: 1 2 # 3 $ и 1 2 3 $ #.Не зная правил, регулирующих использование этих операторов, инфиксное выражение по существу бесполезно.

Или, если выразить это более общими терминами: можно восстановить исходное дерево (синтаксический анализ) из предварительно /Постфиксное выражение без каких-либо дополнительных знаний, но это не относится к инфиксным выражениям.

2 голосов
/ 27 сентября 2011

Постфиксное обозначение, также известное как RPN , очень легко обрабатывать слева направо.Операнд помещается в стек;оператор извлекает свои операнды из стека и выводит результат.Небольшой или никакой разбор необходим.Он используется Forth и некоторыми калькуляторами (HP калькуляторы известны тем, что используют RPN).

Запись префикса почти так же легко обрабатывать;используется в Лиспе.

1 голос
/ 27 сентября 2011

Другим аспектом префикса / постфикса и инфикса является то, что арность оператора (к скольким аргументам он применяется) больше не должна быть ограничена ровно 2. Она может быть больше, а иногда и меньше (0 или 1 когда значения по умолчанию подразумеваются естественным образом, например, ноль для сложения / вычитания, один для умножения / деления).

1 голос
/ 27 сентября 2011

По крайней мере, в случае префиксной нотации: преимущество использования префиксного оператора состоит в том, что синтаксически он читается так, как будто оператор является вызовом функции

...