Обратная польская запись - Reverse Polish notation
Обратная польская нотация ( RPN ), также известная как польская постфиксная нотация или просто постфиксная нотация , представляет собой математическую нотацию, в которой операторы следуют за своими операндами , в отличие от польской записи (PN), в которой операторы предшествуют своим операндам. Скобки не нужны, если каждый оператор имеет фиксированное количество операндов . Описание «Польский» относится к национальности из логик Ян Лукасевичем , который изобрел польскую нотацию в 1924 году.
Обратная польская схема была предложена в 1954 году Артуром Берксом , Доном Уорреном и Джесси Райтом и независимо заново изобретена Фридрихом Л. Бауэром и Эдсгером В. Дейкстра в начале 1960-х годов, чтобы уменьшить доступ к памяти компьютера и использовать стек для оценки выражений . В алгоритмы и обозначения для этой схемы были расширены австралийским философом и компьютерной ученый Чарльз Л. Хамблин в середине 1950-х годов.
В течение 1970-х и 1980-х годов Hewlett-Packard использовала RPN во всех своих настольных и портативных калькуляторах и продолжала использовать его в некоторых моделях до 2020-х годов. В информатике обратная польская запись используется в стек-ориентированных языках программирования, таких как Forth , STOIC , PostScript , RPL и Joy .
Объяснение
В обратной польской записи операторы следуют за своими операндами ; например, чтобы сложить 3 и 4 вместе, можно написать 3 4 +, а не 3 + 4 . Если имеется несколько операций, операторы указываются сразу после их последних операндов (часто оператор принимает два операнда, и в этом случае оператор записывается после второго операнда); Таким образом, выражение, записанное в обычной записи 3–4 + 5 , будет записано как 3 4–5 + в обратной польской записи: сначала из 3 вычитается 4, а затем к нему добавляется 5. Преимущество обратной польской записи состоит в том, что она устраняет необходимость в скобках, которые требуются для инфиксной записи . Хотя 3 - 4 × 5 также можно записать 3 - (4 × 5) , это означает нечто совершенно отличное от (3 - 4) × 5 . В обратной польской нотации первое могло быть записано как 3 4 5 × - , что однозначно означает 3 (4 5 ×) - что сокращается до 3 20 - (которое в дальнейшем может быть уменьшено до -17); последнее может быть записано 3 4 - 5 × (или 5 3 4 - × , если сохраняется аналогичное форматирование), что однозначно означает (3 4 -) 5 × .
Практические последствия
Для сравнения, проверка обратной польской записи с алгебраической записью, обратная польская запись, как было обнаружено, приводит к более быстрым вычислениям по двум причинам. Первая причина заключается в том, что калькуляторы с обратным польским языком не нуждаются в выражениях в скобках, поэтому для выполнения типичных вычислений требуется вводить меньше операций. Кроме того, пользователи обратных польских калькуляторов сделали меньше ошибок, чем у других типов калькуляторов. Более поздние исследования показали, что повышенная скорость обратной польской нотации может быть связана с меньшим количеством нажатий клавиш, необходимых для ввода этой нотации, а не с меньшей когнитивной нагрузкой на пользователей. Однако неофициальные данные свидетельствуют о том, что пользователям изучать обратную польскую нотацию труднее, чем алгебраическую нотацию.
Преобразование из инфиксной записи
Эдсгер В. Дейкстра изобрел алгоритм маневровой станции для преобразования инфиксных выражений в постфиксные выражения (обратная польская нотация), названный так потому, что его работа похожа на работу маневровой станции .
Есть и другие способы создания постфиксных выражений из инфиксных выражений. Большинство синтаксических анализаторов приоритета операторов можно модифицировать для создания постфиксных выражений; в частности, как только абстрактное синтаксическое дерево построено, соответствующее постфиксное выражение задается простым обходом этого дерева после упорядочения .
Реализации
История
Первые компьютеры для реализации архитектуры , позволяющие обратной польской нотации были English Electric Company «S KDF9 машина, которая была объявлена в 1960 году и в продаже в 1963 году, и Burroughs B5000 , объявленный в 1961 году , а также выступил в 1963 году:
Предположительно, дизайнеры KDF9 позаимствовали идеи из GEORGE (General Order Generator) Хамблина, системы программирования автокода, написанной для компьютера DEUCE, установленного в Сиднейском университете , Австралия, в 1957 году.
Один из разработчиков B5000, Роберт С. Бартон , позже писал, что он разработал обратную польскую нотацию независимо от Хамблина где-то в 1958 году после прочтения учебника 1954 года по символической логике Ирвинга Копи , где он обнаружил ссылку на польскую нотацию, в которой он также читал произведения Яна Лукасевича, еще до того, как узнал о творчестве Хамблина.
Компания Friden представила обратную польскую нотацию на рынке настольных калькуляторов с EC-130 , разработанным Робертом «Бобом» Эпплби Рейгеном , поддерживающим четырехуровневый стек в июне 1963 года. Преемник EC-132 добавил функцию квадратного корня в апреле 1965 года. В 1966 году калькулятор Monroe Epic поддерживал безымянную схему ввода, похожую на RPN.
Фирма Хьюлет-Паккард
Инженеры Hewlett-Packard разработали настольный калькулятор 9100A в 1968 году с обратной польской нотацией только с тремя уровнями стека, вариант с обратной польской нотацией, позже названный трехуровневым RPN . Этот калькулятор популяризировал обратную польскую нотацию в научном и инженерном сообществе. HP-35 , первый в мире карманный научный калькулятор , представил классическую четыре уровня RPN в 1972. HP используется обратная польская запись на каждом портативном калькуляторе было продано, будь то научные, финансовые, или программируемый, пока он не представил HP-10 , добавив машинный калькулятор в 1977 году. К этому времени HP была ведущим производителем калькуляторов для профессионалов, включая инженеров и бухгалтеров.
Более поздние калькуляторы с ЖК-дисплеями в начале 1980-х, такие как HP-10C , HP-11C , HP-15C , HP-16C и финансовый калькулятор HP-12C, также использовали обратную польскую нотацию. В 1988 году Hewlett-Packard представила бизнес-калькулятор HP-19B без обратной польской нотации, но его преемник 1990 года, HP-19BII , дал пользователям возможность использовать алгебраическую или обратную польскую нотацию.
Примерно в 1987 году HP представила RPL , объектно-ориентированный преемник обратной польской нотации. Он отличается от классической обратной польской нотации за счет использования стека, ограниченного только объемом доступной памяти (вместо трех или четырех фиксированных уровней), и который может содержать все виды объектов данных (включая символы, строки, списки, матрицы, графику, программы). и т. д.) вместо чисел. Он также изменил поведение стека, чтобы больше не дублировать верхний регистр при отбрасывании (поскольку в неограниченном стеке больше нет верхнего регистра) и поведение ↵ Enterключа, так что он больше не дублирует значения в Y при определенных условиях, обе части конкретного набора правил так называемого автоматического стека памяти или операционного стека (памяти) в классической обратной польской нотации для упрощения некоторых вычислений и экономии нажатий клавиш, но которые также иногда вызывают путаницу среди пользователей, не знакомых с эти свойства. С 1990 по 2003 год HP производила серию графических калькуляторов RPL HP-48 , а в 2006 году представила HP 50g .
С 2011 года Hewlett-Packard предлагала модели калькуляторов 12C, 12C Platinum, 17bII + , 20b , 30b , 33s , 35s , 48gII (RPL) и 50g (RPL), которые поддерживают обратную польскую нотацию. В то время как калькуляторы, эмулирующие классические модели, продолжают поддерживать классическую обратную польскую запись, новые модели обратной польской записи имеют вариант обратной польской записи, в которой ↵ Enterключ ведет себя как в RPL. Этот последний вариант иногда называют входным RPN . В 2013 году HP Prime представила 128-уровневую форму входного RPN, называемую расширенным RPN . К концу 2017 года только 12C, 12C Platinum, 17bii +, 35s и Prime останутся активными моделями HP, поддерживающими обратную польскую нотацию.
WP 31S и WP 34S
Разработанные сообществом калькуляторы WP 31S и WP 34S , основанные на аппаратной платформе HP 20b / HP 30b, поддерживают классическую обратную польскую нотацию в стиле Hewlett-Packard с четырех- или восьмиуровневым стеком. Семиуровневый стек был реализован в настольном научном калькуляторе MITS 7400C в 1972 году, а восьмиуровневый стек уже был предложен Джоном А. Боллом в 1978 году.
Sinclair Radionics
В Великобритании Клайв Синклер «s Sinclair Научные и научно - Programmable модели , используемые в обратной польской нотации.
Коммодор
В 1974 году Commodore выпустила Minuteman * 6 (MM6) без ↵ Enterключа и Minuteman * 6X (MM6X) с ↵ Enterключом, оба реализовали форму двухуровневого RPN . SR4921 RPN пришел с вариантом четыре уровня RPN с уровнями стека имени X, Y, Z, W и (а не Т). В отличие от реализации обратной польской нотации Hewlett-Packard, W заполняется 0 вместо того, чтобы его содержимое дублировалось при отбрасывании стека.
Prinztronic
Prinz и Prinztronic были торговыми марками под собственным брендом британской сети магазинов фото- и электронных товаров Dixons , позже переименованной в магазины Currys Digital и ставшей частью DSG International. В 1970-х годах под брендом Prinztronic продавалось множество моделей калькуляторов, и все они были произведены для них другими компаниями.
Среди них был Программируемый научный калькулятор PROGRAM с обратной польской нотацией.
Хиткит
В 1978 году в бортовом навигационном компьютере Heathkit OC-1401 / OCW-1401 использовались пятиуровневые РПН .
Советский Союз
Советские программируемые калькуляторы ( МК-52 , МК-61 , Б3-34 и более ранние модели Б3-21 ) использовали обратную польскую нотацию как для автоматического режима, так и для программирования. Современные российские калькуляторы МК-161 и МК-152 , разработанные и производимые в Новосибирске с 2007 года и предлагаемые компанией Semico, обратно совместимы с ними. Их расширенная архитектура также основана на обратной польской нотации.
Другой
Существующие реализации, использующие обратную польскую нотацию, включают:
-
Языки программирования, ориентированные на стек, такие как:
- Четвертый
- STOIC
- Фактор
- Язык описания страниц PostScript
- BibTeX
- Befunge
- Радость
- IPTSCRAE
- Формулы Lotus 1-2-3 и Lotus Symphony
- RPL (также известный как обратный польский язык), язык программирования для Commodore PET около 1979/1981 гг.
- RPL (он же Reverse Polish Lisp), язык программирования для калькуляторов Hewlett-Packard в период с 1984 по 2015 год.
- RPNL (язык обратной польской записи)
- Калькуляторы оборудования:
- Некоторые калькуляторы Hewlett-Packard для науки / техники и бизнеса / финансов
- Semico калькуляторов
- SwissMicros калькуляторов
- Некоторые калькуляторы APF также могут использовать RPN
- Программные калькуляторы:
- Калькулятор Mac OS X
- Несколько приложений для Apple iPhone, например, «калькулятор обратной полировки».
- Несколько приложений для Android, например "RealCalc"
- Несколько приложений для Windows 10 Mobile, например «RPN9»
- Программа калькулятора системы unix dc
- Пакет библиотеки Emacs Lisp calc
- Калькулятор Xorg ( xcalc )
- grpn научный / инженерный калькулятор с использованием GIMP Toolkit ( GTK + )
- F-корреляции в элементах словаря MultiValue
- RRDtool , широко используемое программное обеспечение для составления таблиц и построения графиков.
- grdmath, программа для алгебраических операций с сетками NetCDF , часть набора Generic Mapping Tools (GMT)
- galculator, настольный калькулятор GTK
- Калькулятор стека без мыши, научный / инженерный калькулятор, включая комплексные числа.
- rpCalc, простой калькулятор обратной полировки, написанный на Python для Linux и MS Windows и опубликованный под лицензией GNU GPLv2 .
- orpie, калькулятор RPN для терминала для вещественных или комплексных чисел или матриц.
Смотрите также
использованная литература
дальнейшее чтение
- Kreifeldt, John G .; Маккарти, Мэри Э. (1995-11-13) [1981-10-15], Прерывание как тест пользовательско-компьютерного интерфейса (PDF) , Департамент инженерного проектирования, Университет Тафтса, Медфорд, Массачусетс, США / 17-й ежегодный Конференция по ручному управлению / НАСА, стр. 655–667, 02155, N82-13721, 82N13721, 19820005848 , получено 22 сентября 2018 г.CS1 maint: location ( ссылка )
- Вирт, Никлаус (2005-06-15) [2005-02-02]. «Хорошие идеи в Зазеркалье» (PDF) . Цюрих, Швейцария. Архивировано (PDF) из оригинала на 24.06.2017 . Проверено 12 сентября 2015 .
- «Все, что вы всегда хотели знать о RPN, но боялись реализовать - Подробное руководство для научных калькуляторов - Corvus 500 - APF Mark 55 - OMRON 12-SR и другие» (PDF) . TK Enterprises. 1976. Архивировано (PDF) из оригинала 24.06.2017 . Проверено 24 июня 2017 . (NB. В названии обложки есть опечатка: «APS Mark 55» вместо правильного «APF Mark 55».)
- Вандербик, Грег (июнь 2007 г.). Порядок работы и РПН (Пояснительная статья). Экзаменационные работы на степень магистра педагогических наук (MAT). Линкольн, США: Университет Небраски . Документ 46. Архивировано 14 июня 2020 года . Проверено 14 июня 2020 .
внешние ссылки
- Браун, Боб (05.06.2015) [2001]. Мини-лекция о постфиксных обозначениях . Департамент информационных технологий, Колледж вычислительной техники и программного обеспечения, Государственный университет Кеннесо . Архивировано 24 июня 2017 года . Проверено 12 сентября 2015 .
- Редин, Джеймс (2005-02-12) [1997]. «RPN или DAL? Краткий анализ обратной польской записи против прямой алгебраической логики» . Архивировано 24 июня 2017 года . Проверено 12 сентября 2015 .
- Хикс, Дэвид Г. (2013) [1995]. "Что такое РПН?" . Музей калькуляторов HP (MoHPC). Архивировано 24 июня 2017 года . Проверено 12 сентября 2015 .
- Клавер, Ганс (2014). «Учебник RPN, в том числе кое-что, о чем HP не рассказала» . Архивировано 24 июня 2017 года . Проверено 12 сентября 2015 .
- Rosettacode.org предоставляет множество реализаций на нескольких языках программирования.
- http://rpn.codeplex.com/ Реализация RPN с поддержкой пользовательских функций и гибким списком операторов.
- https://xrjunque.nom.es/ConvertAlg2RPN_RPL.aspx Бесплатное онлайн-алгебраическое выражение для конвертера RPN