RPL (язык программирования)

Операционная система карманного калькулятора

РПЛ
ПарадигмаКонкатенативный ( на основе стека ), [1] структурированный
РазработаноHewlett-Packard
Впервые появился1984 (1986)
ОС Калькуляторы HP
Диалекты
Системный RPL, Пользовательский RPL
Под влиянием
RPN , Форт , Лисп [2]
Калькулятор HP 48G, использует RPL

RPL [5] — операционная система для карманных калькуляторов и язык программирования приложений , используемый в научных графических калькуляторах Hewlett-Packard RPN (обратная польская запись) серий HP 28 , 48 , 49 и 50 , но его можно использовать и на калькуляторах без RPN, таких как серии 38 , 39 и 40. Внутри он также использовался в 17B , 18C , 19B и 27S . [7]

RPL — это структурированный язык программирования, основанный на RPN, но в равной степени способный обрабатывать алгебраические выражения и формулы, реализованный как потоковый интерпретатор . [8] RPL имеет много общего с Forth , оба языка основаны на стеке , а также с LISP на основе списков . В отличие от предыдущих калькуляторов HP RPN, которые имели фиксированный четырехуровневый стек , динамический стек, используемый RPL, ограничен только доступным объемом оперативной памяти , при этом калькулятор отображает сообщение об ошибке, когда заканчивается память, а не молча сбрасывает аргументы из стека, как в стеках RPN фиксированного размера. [9]

RPL возник в 1984 году в исследовательском центре HP в Корваллисе, штат Орегон, как замена предыдущей практике реализации операционных систем калькуляторов на языке ассемблера . [7] Первым калькулятором, использовавшим его внутри компании, был HP-18C, а первым калькулятором, сделавшим его доступным для пользователей, был HP-28C, оба выпущены в 1986 году. [10] [7] Последний карманный калькулятор, поддерживающий RPL, HP 50g, был снят с производства в 2015 году. [11] [12] [13] Однако существует множество эмуляторов, которые могут эмулировать калькуляторы RPL компании HP, работающие в различных операционных системах и на различных устройствах, включая смартфоны iOS и Android.Существует также ряд проектов сообщества по воссозданию и расширению RPL на новых калькуляторах, таких как newRPL [14] [15] или DB48X , [16] [17] , которые могут добавлять функции или улучшать производительность. [18]

Варианты

Внутренний низко-среднеуровневый вариант RPL, называемый System RPL (или SysRPL ), используется в некоторых более ранних калькуляторах HP, а также в вышеупомянутых, как часть языка реализации их операционной системы . В серии HP 48 этот вариант RPL недоступен пользователю калькулятора без использования внешних инструментов, но в сериях HP 49/50 в ПЗУ встроен компилятор для использования SysRPL. При кодировании в SysRPL можно вызвать серьезный сбой, поэтому при его использовании следует соблюдать осторожность. Высокоуровневая версия User RPL (или UserRPL ) языка доступна в указанных графических калькуляторах для разработки текстовых и графических прикладных программ. Все программы UserRPL внутренне представлены как программы SysRPL, но используют только безопасное подмножество доступных команд SysRPL. Однако проверка ошибок, которая является частью команд UserRPL, делает программы UserRPL заметно медленнее, чем эквивалентные программы SysRPL. Команда UserRPL SYSEVAL сообщает калькулятору, что необходимо обрабатывать определенные части программы UserRPL как код SysRPL.

Блоки управления

Блоки управления RPL не являются строго постфиксными . Хотя есть некоторые заметные исключения, структуры блоков управления выглядят так, как они выглядят в стандартном инфиксном языке. Калькулятор управляет этим, позволяя реализации этих блоков пропускать вперед в потоке программы по мере необходимости.

Условные операторы

ЕСЛИ/ТО/ИНАЧЕ/КОНЕЦ

RPL поддерживает базовую условную проверку через структуру IF/THEN/ELSE. Базовый синтаксис этого блока:

ЕСЛИ условие ТО если-истина [ИНАЧЕ если-ложь] КОНЕЦ

В следующем примере проверяется, равно ли число в нижней части стека «1», и, если да, заменяет его на «Равно единице»:

« ЕСЛИ 1 == ТО "Равно одному" КОНЕЦ »

Конструкция IF оценивает условие, а затем проверяет дно стека на предмет результата. В результате RPL может опционально поддерживать блоки IF в стиле FORTH, позволяя определять условие до блока. Оставляя условие пустым, оператор IF не будет вносить никаких изменений в стек во время выполнения условия и будет использовать существующий результат внизу стека для проверки:

« 1 == ЕСЛИ ТО "Равно одному" КОНЕЦ »

ИФТ/ИФТЕ

Постфиксное условное тестирование может быть выполнено с использованием функций IFT («if-then») и IFTE («if-then-else»).

IFT и IFTE выталкивают из стека две или три команды соответственно. Верхнее значение оценивается как логическое, и, если оно истинно, второе верхнее значение помещается обратно в стек. IFTE допускает третье значение «else», которое будет помещено обратно в стек, если логическое значение ложно.

В следующем примере функция IFT используется для извлечения объекта из нижней части стека и, если он равен 1, заменяет его на «One»:

« 1 == «Один» IFT »

В следующем примере функция IFTE используется для извлечения объекта из нижней части стека и, если он равен 1, заменяет его на «One». Если он не равен 1, заменяет его на строку «Not one»:

« 1 == "Один" "Ни один" IFTE »

IFT и IFTE оценят программный блок, заданный как один из его аргументов, что позволяет использовать более компактную форму условной логики, чем структура IF/THEN/ELSE/END. Следующий пример извлекает объект из нижней части стека и заменяет его на «One», «Less» или «More» в зависимости от того, равен ли он, меньше или больше 1.

« ДУП 1 == « БРОСЬТЕ «Один» » « 1 < "Меньше" "Больше" IFTE » ИФТЕ »

ДЕЛО/ТОГДА/КОНЕЦ

Для поддержки более сложной условной логики RPL предоставляет структуру CASE/THEN/END для обработки нескольких исключающих тестов. Будет выполнена только одна из ветвей в операторе CASE. Базовый синтаксис этого блока:

СЛУЧАЙ условие_1 ТОГДА если-условие_1 КОНЕЦ ... условие_n ТОГДА если-условие_n КОНЕЦ если-нет КОНЕЦ

Следующий код иллюстрирует использование блока CASE/THEN/END. При наличии буквы в нижней части стека он заменяет ее эквивалентом в виде строки или «Неизвестной буквой»:

«  СЛУЧАЙ DUP "A" == ЗАТЕМ "Альфа" КОНЕЦ DUP "B" == ЗАТЕМ "Бета" КОНЕЦ DUP "G" == ЗАТЕМ "Гамма" КОНЕЦ «Неизвестное письмо» КОНЕЦ SWAP DROP @ Избавьтесь от оригинального письма »

Этот код идентичен следующему эквиваленту вложенного блока IF/THEN/ELSE/END:

« ЕСЛИ DUP "A" == ЗАТЕМ "Альфа" ЕЩЕ ЕСЛИ DUP "B" == ТО "Бета" ЕЩЕ ЕСЛИ DUP "G" == ТО "Гамма" ЕЩЕ «Неизвестное письмо» КОНЕЦ КОНЕЦ КОНЕЦ SWAP DROP @ Избавьтесь от оригинального письма »

Циклические операторы

ДЛЯ/СЛЕДУЮЩИЙ

RPL предоставляет оператор FOR/NEXT для циклического перехода от одного индекса к другому. Индекс для цикла хранится во временной локальной переменной, к которой можно получить доступ в цикле. Синтаксис блока FOR/NEXT следующий:

index_from index_to FOR имя_переменной оператор_цикла NEXT

В следующем примере цикл FOR используется для суммирования чисел от 1 до 10. Индексная переменная цикла FOR — «I»:

«  0 @ Начать с нуля в стеке 1 10 @ Цикл от 1 до 10 ДЛЯ I @ "I" — локальная переменная I + @ Добавьте «I» к текущей сумме. ДАЛЕЕ @ Повторить... »

СТАРТ/ДАЛЕЕ

Блок START/NEXT используется для простого блока, который выполняется от начального индекса до конечного индекса. В отличие от цикла FOR/NEXT, переменная цикла недоступна. Синтаксис блока START/NEXT:

index_from index_to START loop_statement NEXT

ДЛЯ/ШАГ и СТАРТ/ШАГ

FOR/NEXT и START/NEXT поддерживают определяемый пользователем шаг приращения. Заменив завершающее ключевое слово NEXT на приращение и ключевое слово STEP, переменная цикла будет увеличиваться или уменьшаться на значение, отличное от значения по умолчанию +1. Например, следующий цикл делает шаг назад с 10 до 2, уменьшая индекс цикла на 2:

« 10 2 СТАРТ -2 ШАГ »

ПОКА/ПОВТОРИТЬ/КОНЕЦ

Блок WHILE/REPEAT/END в RPL поддерживает неопределенный цикл с проверкой условия в начале цикла. Синтаксис блока WHILE/REPEAT/END следующий:

WHILE условие REPEAT оператор_цикла END

ДЕЛАТЬ/ДО/КОНЦА

Блок DO/UNTIL/END в RPL поддерживает неопределенный цикл с проверкой условия в конце цикла. Синтаксис блока DO/UNTIL/END следующий:

DO loop_statement ДО тех пор, пока условие КОНЕЦ

Смотрите также

Примечания

1. ^ «RPL» происходит от Reverse Polish Lisp , согласно его первоначальным разработчикам, [19] [20] [21] [22] [23] [24] в то время как в течение короткого времени в 1987 году маркетинг HP пытался создать для него бэкроним ROM-based Procedural Language . [2] [24] [25] Кроме того, аббревиатуры RPL иногда неправильно интерпретируются как Reverse Polish Logic или Reverse Polish Language . [26]

Ссылки

  1. ^ «Радость программирования?». Музей калькуляторов HP. 2020. Архивировано из оригинала 2021-12-03.
  2. ^ ab Patton, Charles M. (август 1987 г.). "Computation for Handheld Calculators" (PDF) . Hewlett-Packard Journal . 38 (8). Пало-Альто, Калифорния, США: Hewlett-Packard Company : 21– 25. Архивировано из оригинала (PDF) 2011-12-06 . Получено 2015-09-12 .
  3. ^ http://h41268.www4.hp.com/live/index_e.aspx?qid=20709&jumpid=va_r11363_us/en/any/tsg/pl_ot_ob_ds_pd/calculatoremulators_cc/dt [ постоянная неработающая ссылка ‍ ]
  4. ^ http://www.calculatrices-hp.com/index.php?page=emulateurs
  5. ^ "Эмулятор HP 50g с ПЗУ #2.16".
  6. ^ http://www.calculatrices-hp.com/uploads/emulateurs/HP50gVirtualCalculatorSetup_3_1_30.zip
  7. ^ abc Hewlett-Packard . "RPLMan from Goodies Disk 4" (RPLMAN.ZIP) . Получено 2015-09-12 .
  8. ^ Хорн, Джозеф К. «Что такое RPL?». Архивировано из оригинала 2017-09-17 . Получено 2017-09-17 .
  9. ^ Вессман, Тимоти «Тим» Джеймс (2016-06-21) [2016-06-20]. «Что делать с переполнением стека OBJ->/LIST->?». MoHPC — Музей калькуляторов HP . Архивировано из оригинала 2023-09-24 . Получено 2023-09-24 .
  10. Wickes, William C. (январь–февраль 1987 г.). «HP-28C: взгляд изнутри». HPX Exchange . 1 (1).[1]
  11. ^ Куперус, Клаас (2015-03-04). "HP 50g: Конец эпохи". Моравия. Архивировано из оригинала 2015-04-02.
  12. ^ Куперус, Клаас (6 марта 2015 г.). «HP 50g не такие уж хорошие новости?». Моравия . Проверено 1 января 2016 г.
  13. ^ Вессман, Тимоти «Тим» Джеймс (2015-12-26). «Windows 10 не позволяет устанавливать драйверы USB HP 50g». MoHPC — Музей калькуляторов HP . Получено 01.01.2016 .
  14. ^ Лапилли, Клаудио Даниэль (3 января 2014 г.). «новаяРПЛ» . Проверено 12 сентября 2015 г.[2] (производная RPL с открытым исходным кодом для HP 50g и HP 49g+ , HP 40gs , HP 39gs и hp 39g+, а также HP Prime )
  15. ^ Лапилли, Клаудио Даниэль (2021-07-23) [2014]. "newRPL Documentation Project". newRPL . Архивировано из оригинала 2023-11-03 . Получено 2023-10-23 .
  16. ^ de Dinechin, Christophe (2022). "DB48X на DM42 - среда выполнения RPL для калькулятора DM42, в духе HP48/49/50". DB48X . Архивировано из оригинала 2023-11-03 . Получено 2023-10-23 .
  17. ^ де Динешин, Кристоф (2023-02-03). "Возрождение обратного польского Lisp - Создание калькулятора с открытым исходным кодом, похожего на HP48". FOSDEM . Архивировано из оригинала 2023-10-03 . Получено 2023-10-03 .(Примечание. Улучшенная производная RPL под названием DB48X для SwissMicros DM42 и DM32 .)
  18. ^ Лапилли, Клаудио Даниэль (2014-10-31). "N-Queens on 50g (язык RPL)". MoHPC - Музей калькуляторов HP . Архивировано из оригинала 2023-11-03 . Получено 2023-10-23 .
  19. ^ Wickes, William C. (1988-10-01) [14–18 июня 1988 г.]. Forsely, Lawrence P. (ред.). RPL: ​​язык математического управления. Труды конференции Rochester Forth 1988 г.: среды программирования. Том 8. Рочестер, Нью-Йорк, США: Institute for Applied Forth Research, Inc., Университет Рочестера . С.  27–32 . ISBN 978-0-91459308-9. OCLC  839704944. Было рассмотрено несколько существующих операционных систем и языков, но ни один из них не мог удовлетворить всем целям проектирования. Поэтому была разработана новая система, которая объединяет потоковую интерпретацию Forth с функциональным подходом Lisp . Полученная операционная система, неофициально известная как RPL (Reverse-Polish Lisp), впервые появилась на публике в июне 1986 года в калькуляторе HP-18C Business Consultant.(Примечание. Это название часто цитируется как «RPL: язык управления математикой». Отрывок доступен по адресу: [3][4])
  20. ^ Wickes, William C. (1991-03-11). "RPL расшифровывается как Reverse Polish Lisp". www.hpcalc.org . Получено 2015-09-12 . RPL расшифровывается как Reverse Polish Lisp. В ранние дни разработки RPL мы устали называть безымянную систему "новой системой", и один из разработчиков придумал "RPL", и как игру слов на "RPN", которая всегда была любимой/ненавистной отличительной чертой HP calcs, и как точное указание на происхождение языка от Forth и Lisp . RPL никогда не предназначался как публичный термин; во время статьи в HP Journal (август 1987 г.) о HP 28C была предпринята попытка создать менее причудливое название — отсюда "ROM-based procedural language", которое сохранило инициалы, но имело более достойное звучание. Команда разработчиков никогда не называет его иначе, как (инициалы) RPL. Вы можете выбрать любую из двух полных версий слова, которая вам больше нравится. Или как насчет "Rich People's Language?" Билл Уикс, HP Corvallis.
  21. ^ Schoorl, André (2000-04-04) [1997]. "Список часто задаваемых вопросов HP48". Архив калькулятора HP. стр. 69. Получено 2015-09-12 .
  22. ^ "Я слышал названия RPL, Saturn, STAR, GL и т. д. Что это такое? - RPL". FAQ: 2 из 4 - Оборудование, программы и программирование . 4.62. comp.sys.hp48. 2000-04-14. 8.1 . Получено 2015-09-12 .
  23. ^ Нельсон, Ричард Дж. (2012-04-04). "HP RPN Evolves" (PDF) . HP Solve ( 27 ). Hewlett-Packard : 30–32 . Получено 2015-09-12 .
  24. ^ аб Миер-Енджейович, Влодзимеж «Влодек» Энтони Кристофер (июль 1991 г.). Руководство по портативным калькуляторам и компьютерам HP (5-е изд.). HHC 2011. ISBN 978-1-88884030-8. 1888840307. RPL означает Reverse Polish Lisp — он объединил язык калькулятора RPN более ранних моделей с функциями языков программирования Lisp и Forth . Какое-то время HP объясняла буквы RPL как аббревиатуру от «ROM-based Procedural Language».
  25. ^ "HP отмечает 35 лет инноваций в области карманных калькуляторов". Hewlett-Packard Development Company, LP 2007. Архивировано из оригинала 2007-03-17 . Получено 2015-09-13 . 1987: HP-28C : Первый полноценный калькулятор RPL: ​​В конце 1980-х годов HP разработала новый язык программирования для своей новой серии чрезвычайно мощных калькуляторов. Объединив элементы RPN, Lisp и Forth , HP придумала язык под названием RPL (или ROM-based Procedural Language).
  26. ^ Рехлин, Эрик; Марангон, Карлос. "HPedia: Энциклопедия калькуляторов HP". www.hpcalc.org . Получено 20 апреля 2020 г.

Дальнейшее чтение

  • HP 48G Series – Руководство пользователя (UG) (8-е изд.). Hewlett-Packard . Декабрь 1994 [1993]. HP 00048-90126, (00048-90104). Архивировано из оригинала 2016-08-06 . Получено 2015-09-06 .[6]
  • HP 48G Series – Advanced User's Reference Manual (AUR) (4-е изд.). Hewlett-Packard . Декабрь 1994 [1993]. HP 00048-90136, 0-88698-01574-2. Архивировано из оригинала 2016-08-06 . Получено 2015-09-06 .[7]
  • Руководство пользователя графического калькулятора HP 50g (UG) (1-е изд.). Hewlett-Packard . Апрель 2006 г. HP F2229AA-90006 . Получено 06.09.2015 .
  • Справочное руководство пользователя графического калькулятора HP 50g / 49g+ / 48gII (2-е изд.). Hewlett-Packard . 14.07.2009 [2005]. HP F2228-90010 . Получено 06.09.2015 .
  • Kalinowski, Eduardo de Mattos; Dominik, Carsten (2002-04-24) [1998-07-12]. Программирование на системном RPL (PDF) (2-е изд.). Архивировано (PDF) из оригинала 2016-01-14 . Получено 2016-08-16 .(Старая версия: [8])
  • Доннелли, Джеймс (01.03.2009). Рехлин, Эрик (ред.). Введение в HP 48 System RPL и программирование на языке ассемблера . Получено 07.09.2015 .
  • Рехлин, Эрик (2015) [1997]. "Файлы программной документации HP 49/50". Архив калькулятора HP . Получено 12 сентября 2015 г.
  • Рехлин, Эрик (2015) [1997]. "Файлы программной документации HP 48". Архив калькулятора HP . Получено 12 сентября 2015 г.
  • Хикс, Дэвид Г. (2013) [1995]. "RPL". Музей калькуляторов HP (MoHPC). Архивировано из оригинала 2023-09-30 . Получено 2015-09-12 .
  • Бертран, Жоэль (2015) [2009]. "RPL/2 - новый обратный польский Лисп" . Получено 12 сентября 2015 г.(клон RPL под лицензией GPL)
  • Рубет, Луис (01.07.2017). "rpn - реализация RPL с открытым исходным кодом". GitHub . Получено 12.09.2015 .(Открытая реализация RPL с произвольной точностью)
  • Suárez, Alvaro Gerardo (2018-05-01). "MyRPL - Союз языков HP41 и HP48". Архивировано из оригинала 2023-10-03 . Получено 2018-05-04 .(Смешанный язык RPL (HP48) и FOCAL (HP41))
Взято с "https://en.wikipedia.org/w/index.php?title=RPL_(язык_программирования)&oldid=1247284276"