Зачем нам префикс, постфиксная нотация

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

4 ответов


нотация Infix легко читается для люди, тогда как pre-/postfix нотация легче анализировать для машины. Большим преимуществом в нотации pre - / postfix является то, что никогда не возникает никаких вопросов, таких как приоритет оператора.

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

или, говоря более общими словами: можно восстановить исходное (разборное) дерево из выражения pre-/postfix без каких-либо дополнительных знаний, но то же самое не верно для выражений infix.


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

Префиксная нотация почти так же проста в обработке; она используется в Lisp.


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


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