Обратная польская нотация ( RPN ), также известная как польская постфиксная нотация или просто постфиксная нотация , представляет собой математическую нотацию, в которой операторы следуют за своими операндами , в отличие от польской записи (PN), в которой операторы предшествуют своим операндам. Скобки не нужны, если каждый оператор имеет фиксированное количество операндов . Описание «Польский» относится к национальности из логик Яна Лукасевичем , [1] , который изобрел польское обозначение в 1924 году [2] [3]
Обратная польская схема была предложена в 1954 году Артуром Берксом , Доном Уорреном и Джесси Райтом [4] и независимо заново изобретена Фридрихом Л. Бауэром и Эдсгером В. Дейкстра в начале 1960-х годов, чтобы уменьшить доступ к памяти компьютера и использовать стек для оценки выражения . В алгоритмы и обозначения для этой схемы были расширены австралийским философом и компьютерной ученый Чарльз Л. Хамблин в середине 1950-х годов. [5] [6] [7] [8] [9] [10]
В течение 1970-х и 1980-х годов Hewlett-Packard использовала RPN во всех своих настольных и портативных калькуляторах и продолжала использовать его в некоторых моделях до 2020-х годов. [11] [12] В информатике обратная польская нотация используется в стек-ориентированных языках программирования, таких как 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 × .
Для сравнения, проверка обратной польской записи с алгебраической записью, обратная польская запись, как было обнаружено, приводит к более быстрым вычислениям по двум причинам. Первая причина заключается в том, что калькуляторы с обратным польским языком не нуждаются в выражениях в скобках, поэтому для выполнения типичных вычислений требуется вводить меньше операций. Кроме того, пользователи обратных польских калькуляторов сделали меньше ошибок, чем у других типов калькуляторов. [13] [14] Более поздние исследования выяснили, что повышенная скорость обратной польской нотации может быть связана с меньшим количеством нажатий клавиш, необходимых для ввода этой нотации, а не с меньшей когнитивной нагрузкой на пользователей. [15]Однако неофициальные данные свидетельствуют о том, что пользователям изучать обратную польскую нотацию труднее, чем алгебраическую нотацию. [14]
Эдсгер В. Дейкстра изобрел алгоритм маневровой станции для преобразования инфиксных выражений в постфиксные выражения (обратная польская нотация), названный так потому, что его работа похожа на работу маневровой станции .
Есть и другие способы создания постфиксных выражений из инфиксных выражений. Большинство синтаксических анализаторов приоритета операторов можно модифицировать для создания постфиксных выражений; в частности, как только абстрактное синтаксическое дерево построено, соответствующее постфиксное выражение задается простым обходом этого дерева после упорядочения .
Первые компьютеры для реализации архитектуры , позволяющие обратной польской нотации были English Electric Company «S KDF9 машина, которая была объявлена в 1960 году и в продаже в 1963 году, [16] и Burroughs B5000 , объявленный в 1961 году , а также выступил в 1963 году:
Предположительно, разработчики KDF9 позаимствовали идеи из GEORGE (General Order Generator) Хамблина, [5] [6] [8] системы программирования автокода, написанной для компьютера DEUCE, установленного в Сиднейском университете , Австралия, в 1957 г. [5] [ 6] [8] [16]
Один из дизайнеров B5000, Роберт С. Бартон , позже писал , что он разработал обратную польскую нотацию независимо от Хамблин где- то в 1958 году после прочтения 1954 учебника по символической логике Ирвинг Копи , [17] [18] [19] , где он нашел ссылку на польскую нотацию [19], которая заставила его прочитать работы Яна Лукасевича, [19] и до того, как он узнал о работе Гамблина.
Фриден внес обратной польской записи на настольный калькулятор рынке с EC-130 , разработанный Роберт «Боб» Appleby Ragen , [20] поддерживает стек четыре уровня [3] в июне 1963 года [21] Правопреемник ИС-132 добавлен функция извлечения квадратного корня в апреле 1965 года. [22] Примерно в 1966 году калькулятор Monroe Epic поддерживал безымянную схему ввода, похожую на RPN. [3]
Инженеры Hewlett-Packard разработали настольный калькулятор 9100A в 1968 году с обратной польской нотацией [11] только с тремя уровнями стека [23], вариант обратной польской записи, позже названный трехуровневым RPN . Этот калькулятор популяризировал обратную польскую нотацию в научном и инженерном сообществе. HP-35 , первый в мире карманный научный калькулятор , [11] ввел классическую четыре уровня RPN в 1972 г. [24] 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 при определенных условиях, обе части конкретного набора правил так называемого автоматического стека памяти [25] или операционного стека (памяти)[26] в классической обратной польской нотации для облегчения некоторых вычислений и экономии нажатий клавиш, но которые также иногда вызывают путаницу среди пользователей, не знакомых с этими свойствами. С 1990 по 2003 год HP производила серию графических калькуляторов RPL HP-48 , а в 2006 году представила HP 50g .
С 2011 года Hewlett-Packard предлагала модели калькуляторов 12C, 12C Platinum, 17bII + , 20b , 30b , 33s , 35s , 48gII (RPL) и 50g (RPL), которые поддерживают обратную польскую нотацию. [27] В то время как калькуляторы, эмулирующие классические модели, продолжают поддерживать классическую обратную польскую запись, новые модели обратной польской записи имеют вариант обратной польской записи, в котором ↵ Enterклавиша ведет себя как в RPL. Этот последний вариант иногда называют входным RPN . [28] В 2013 году HP Prime представила 128-уровневую форму входного RPN, называемую расширенным RPN.. К концу 2017 года только 12C, 12C Platinum, 17bii +, 35s и Prime остаются активными моделями HP, поддерживающими обратную польскую нотацию.
Разработанные сообществом калькуляторы WP 31S и WP 34S , основанные на аппаратной платформе HP 20b / HP 30b, поддерживают классическую обратную польскую нотацию в стиле Hewlett-Packard с четырех- или восьмиуровневым стеком. Семиуровневый стек был реализован в настольном научном калькуляторе MITS 7400C в 1972 году [29] [30] [31], а восьмиуровневый стек уже был предложен Джоном А. Боллом в 1978 году [3].
В Великобритании Клайв Синклер «s Sinclair Научные и научно - Programmable модели , используемые в обратной польской нотации. [32] [33]
В 1974 году Commodore выпустила Minuteman * 6 (MM6) без ↵ Enterключа и Minuteman * 6X (MM6X) с ↵ Enterключом, оба реализовали форму двухуровневого RPN . SR4921 RPN пришел с вариантом четыре уровня RPN с уровнями стека имени X, Y, Z, W и (а не Т). В отличие от реализации обратной польской нотации Hewlett-Packard, W заполняется 0 вместо того, чтобы его содержимое дублировалось при отбрасывании стека. [34]
Prinz и Prinztronic были торговыми марками под собственным брендом британской сети магазинов фото- и электронных товаров Dixons , позже переименованной в магазины Currys Digital и ставшей частью DSG International. В 1970-х годах под брендом Prinztronic продавалось множество моделей калькуляторов, и все они были произведены для них другими компаниями.
Среди них был Программируемый научный калькулятор PROGRAM [35] с обратной польской нотацией.
В 1978 году в бортовом навигационном компьютере Heathkit OC-1401 / OCW-1401 использовались пятиуровневые РПН .
Советские программируемые калькуляторы ( МК-52 , МК-61 , Б3-34 и более ранние модели Б3-21 [36] ) использовали обратную польскую нотацию как для автоматического режима, так и для программирования. Современные российские калькуляторы МК-161 [37] и МК-152 , [38], разработанные и производимые в Новосибирске с 2007 года и предлагаемые компанией Semico, [39] обратно совместимы с ними. Их расширенная архитектура также основана на обратной польской нотации.
Существующие реализации, использующие обратную польскую нотацию, включают:
[…] В своих рекламных объявлениях, а также в письме ко мне компания Hewlett-Packard (HP), самый известный производитель калькуляторов RPN, говорит, что RPN основан на предположении Яна Лукасевича (1878–1956), и что RPN был изобретен и запатентован HP. Если не считать очевидного противоречия в этих двух утверждениях, я не думаю, что какое-либо из них является полностью верным. Мой первый опыт работы с RPN был связан с хорошим старым настольным электронным калькулятором Friden EC-130 , около 1964 года. EC-130 имеет RPN с выталкиваемым стеком из четырех регистров, которые все одновременно отображаются на дисплее электронно-лучевой трубки. Кроме того, они показаны в перевернутом виде, то есть регистр последнего вошел - первым ушел внизу. […] Примерно в 1966 году « Эпос Монро»Калькулятор предлагал RPN со стеком из четырех штук, принтером и возможностью программирования с 14 или 42 шагами. В буклетах с инструкциями к этим двум калькуляторам не упоминается ни РПН, ни Яна Лукасевича . […]
[…]
Вскоре
Хэмблин
осознал проблемы (а) вычисления математических формул, содержащих скобки, и (б) накладных расходов памяти при работе с хранилищами памяти, каждое из которых имеет собственное имя. Одним из решений первой проблемы был
Ян Лукасевич.
Польская нотация, которая позволяет составителю математической нотации указывать читателю порядок выполнения операций (например, сложение, умножение и т. д.) без использования скобок. Польская нотация достигает этого за счет того, что перед операндами, к которым он применяется, стоит оператор (+, × и т. Д.), Например, + ab, вместо обычного a + b. Хэмблин, обученный формальной логике, знал о работах Лукасевича. […]
[…] Я изменил архитектуру, чтобы использовать RPN (обратная польская нотация), которая является идеальной нотацией для среды программирования, в которой эффективность кодирования имеет решающее значение.
Вначале это изменение не было воспринято хорошо ... […]
[…]
KDF9
примечателен тем, что считается первым компьютером с форматом команд с нулевым адресом, о котором было объявлено (в 1960 году). Впервые он был доставлен примерно в то же время (в начале 1963 года), что и другой знаменитый компьютер с нулевым адресом,
Берроуз B5000 в Америке. Как и многие современные карманные калькуляторы, машина с нулевым адресом позволяет использовать обратную польскую арифметику; это дает определенные преимущества разработчикам компиляторов. Считается, что внимание команды English Electric было впервые привлечено к концепции нулевого адреса благодаря контакту с Джорджем (Генератором общего порядка), системой программирования автокода, написанной для компьютера Deuce Сиднейским университетом , Австралия, в последнем. половина 1950-х гг. Джордж использовал Reversed Polish, и команда KDF9 была привлечена к этому соглашению по прагматической причине, желая повысить производительность за счет минимизации доступа к основному магазину. Это можно противопоставить более "теоретической" линии, взятой независимо отБерроуз . Помимо аппаратного вложения хранилища или стека - основного механизма компьютера с нулевым адресом - KDF9 имел другие группы центральных регистров для повышения производительности, что придавало ему интересную внутреннюю структуру. […][1] (NB. Это отредактированная версия выступления Северо-Западной группы общества в Музее науки и промышленности, Манчестер, Великобритания, 01.10.1996.)
[…] Боб имеет более 80 патентов, полученных за время его работы в качестве директора отдела исследований в компании
Friden
, а также
Зингера
и старшего инженера по проектам в
Xerox
.
Он ушел из Xerox RD в 1990 году. Он отвечает за разработку первого коммерческого электронного калькулятора
Friden 130
, который был выставлен в
Смитсоновском институте
.
[…]
[…] Операционный стек и обратная польская (ukasiewicz) нотация, используемые в HP-35, являются наиболее эффективным способом вычисления математических выражений, известным в компьютерных науках.
[…]