Jump to content

РПЛ (язык программирования)

(Перенаправлено с DB48X )

РПЛ
Парадигма Конкатенативный ( на основе стека ), [1] структурированный
Разработано Хьюлетт-Паккард
Впервые появился 1984 (1986)
ТЫ HP Калькуляторы
Диалекты
Системный RPL, Пользовательский RPL
Под влиянием
РПН , Форт , Лисп [2]
Калькулятор HP 48G, использует 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] Однако существует несколько эмуляторов, которые могут имитировать калькуляторы HP RPL, которые работают на различных операционных системах и устройствах, включая смартфоны 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. Основной синтаксис этого блока:

 IF условие THEN если-истина [ELSE если-ложь] КОНЕЦ 

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

 « ЕСЛИ 1 == ТО «Равно единице» КОНЕЦ » 

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

 « 1 == ЕСЛИ ТО «Равно единице» КОНЕЦ » 

ИФТ/ИФТЕ

[ редактировать ]

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

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

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

 « 1 == «Один» ИФТ » 

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

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

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

 «   ДУП 1 ==   «КАПЛЯ «Один»»   « 1 < «Меньше» «Больше» IFTE »   IFTE » 

СЛУЧАЙ/ТО/КОНЕЦ

[ редактировать ]

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

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

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

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

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

 «    ЕСЛИ ДУП "А" ==    ЗАТЕМ       "Альфа"    ЕЩЕ        ЕСЛИ 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    FOR I @ «I» — локальная переменная       I + @ Добавить «I» к итоговой сумме    СЛЕДУЮЩИЙ @ Повторить... » 

СТАРТ/ДАЛЕЕ

[ редактировать ]

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

 index_from index_to START оператор_цикла NEXT 

FOR/STEP и START/STEP

[ редактировать ]

И 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 цикл_оператор ДО тех пор, пока условие END 

См. также

[ редактировать ]

Примечания

[ редактировать ]
1. ^ «RPL» происходит от Reverse Polish Lisp , по словам его первоначальных разработчиков, [19] [20] [21] [22] [23] [24] в то время как в течение короткого времени в 1987 году маркетинг HP пытался придумать для него бэкроним «Процедурный язык на основе ПЗУ» . [2] [24] [25] Кроме того, инициалы RPL иногда неправильно интерпретируются как Reverse Polish Logic или Reverse Polish Language . [26]
  1. ^ «Радость программирования?» . Музей калькуляторов HP. 2020. Архивировано из оригинала 3 декабря 2021 г.
  2. ^ Jump up to: а б Паттон, Чарльз М. (август 1987 г.). «Расчеты для портативных калькуляторов» (PDF) . Журнал Hewlett-Packard . 38 (8). Пало-Альто, Калифорния, США: Компания Hewlett-Packard : 21–25. Архивировано из оригинала (PDF) 6 декабря 2011 г. Проверено 12 сентября 2015 г.
  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. ^ Jump up to: а б с Хьюлетт-Паккард . «RPLMan с Goodies Disk 4» (RPLMAN.ZIP) . Проверено 12 сентября 2015 г.
  8. ^ Хорн, Джозеф К. «Что такое РПЛ?» . Архивировано из оригинала 17 сентября 2017 г. Проверено 17 сентября 2017 г.
  9. ^ Вессман, Тимоти «Тим» Джеймс (21 июня 2016 г.) [20 июня 2016 г.]. «Что делать с переполнением стека OBJ->/LIST->?» . MoHPC — Музей калькуляторов HP . Архивировано из оригинала 24 сентября 2023 г. Проверено 24 сентября 2023 г.
  10. ^ Уикс, Уильям К. (январь – февраль 1987 г.). «HP-28C: взгляд изнутри». Обмен HPX . 1 (1). [1]
  11. ^ Куперус, Клаас (04 марта 2015 г.). «HP 50g: Конец эпохи» . Моравия. Архивировано из оригинала 02 апреля 2015 г.
  12. ^ Куперус, Клаас (06 марта 2015 г.). «HP 50g не такие уж хорошие новости?» . Моравия . Проверено 1 января 2016 г.
  13. ^ Вессман, Тимоти «Тим» Джеймс (26 декабря 2015 г.). «Windows 10 не позволяет устанавливать драйверы USB HP 50g» . MoHPC — Музей калькуляторов HP . Проверено 1 января 2016 г.
  14. ^ Лапилли, Клаудио Даниэль (3 января 2014 г.). «новаяРПЛ» . Проверено 12 сентября 2015 г. [2] (производная версия RPL с открытым исходным кодом для HP 50g и HP 49g+ , HP 40gs , HP 39gs и hp 39g+ , а также HP Prime )
  15. ^ Лапилли, Клаудио Даниэль (23 июля 2021 г.) [2014]. «Проект документации newRPL» . новыйРПЛ . Архивировано из оригинала 03.11.2023 . Проверено 23 октября 2023 г.
  16. ^ де Динешен, Кристоф (2022). «DB48X на DM42 — среда выполнения RPL для калькулятора DM42, в духе HP48/49/50» . DB48X . Архивировано из оригинала 03.11.2023 . Проверено 23 октября 2023 г.
  17. ^ де Динешен, Кристоф (3 февраля 2023 г.). «Возрождение обратного польского Lisp — создание калькулятора, подобного HP48, с открытым исходным кодом» . ФОСДЕМ . Архивировано из оригинала 3 октября 2023 г. Проверено 03 октября 2023 г. (Примечание. Улучшенная производная RPL под названием DB48X для SwissMicros DM42 и DM32 .)
  18. ^ Лапилли, Клаудио Даниэль (31 октября 2014 г.). «Н-Квинс на 50г (язык РПЛ)» . MoHPC — Музей калькуляторов HP . Архивировано из оригинала 03.11.2023 . Проверено 23 октября 2023 г.
  19. ^ Уикс, Уильям К. (10 октября 1988 г.) [14–18 июня 1988 г.]. Например, Лоуренс П. (ред.). RPL: язык математического управления . Материалы Рочестерской четвертой конференции 1988 года: Среды программирования. Том. 8. Рочестер, Нью-Йорк, США: Институт прикладных исследований, Университет Рочестера . стр. 27–32. ISBN  978-0-91459308-9 . OCLC   839704944 . Было рассмотрено несколько существующих операционных систем и языков, но ни одна из них не смогла удовлетворить все цели проектирования. Поэтому была разработана новая система, которая объединяет поточную интерпретацию Форта с функциональным подходом Лиспа . Получившаяся в результате операционная система, неофициально известная как RPL (от Reverse-Polish Lisp), впервые появилась публично в июне 1986 года в калькуляторе HP-18C Business Consultant. (Примечание. Это название часто называют «RPL: язык управления математикой». Отрывок доступен по адресу: [3] [4] )
  20. ^ Уикс, Уильям К. (11 марта 1991 г.). «RPL означает Reverse Polish Lisp» . www.hpcalc.org . Проверено 12 сентября 2015 г. RPL расшифровывается как Reverse Polish Lisp. На заре разработки RPL мы устали называть безымянную систему «новой системой», и один из членов команды разработчиков придумал «RPL», оба — как обыгрывание «RPN», которую любили/ненавидели. навсегда останется отличительной чертой вычислений HP и как точное указание на происхождение языка от Форта и Лиспа .
    RPL никогда не задумывался как публичный термин; во время статьи в журнале HP (август 1987 г.) о HP 28C была попытка создать менее причудливое имя - отсюда и «процедурный язык на основе ПЗУ», который сохранил инициалы, но имел более достойное звучание. Команда разработчиков никогда не называет это иначе, как (инициалами) RPL. Вы можете выбрать любую из двух полных версий слов, которые вам нравятся. А как насчет «Языка богатых людей»? Билл Уикс, HP Corvallis.
  21. ^ Шорл, Андре (4 апреля 2000 г.) [1997]. «Список часто задаваемых вопросов по HP48» . Архив калькулятора HP. п. 69 . Проверено 12 сентября 2015 г.
  22. ^ «Я слышал названия РПЛ, Сатурн, STAR, GL и т. д. Какие они? - РПЛ» . Часто задаваемые вопросы: 2 из 4 — Аппаратное обеспечение, программы и программирование . 4.62. комп.sys.hp48. 14 апреля 2000 г. 8.1 . Проверено 12 сентября 2015 г.
  23. ^ Нельсон, Ричард Дж. (4 апреля 2012 г.). «Развитие HP RPN» (PDF) . Решение HP (27). Хьюлетт-Паккард : 30–32 . Проверено 12 сентября 2015 г.
  24. ^ Jump up to: а б Миер-Енджейович, Влодзимеж «Влодек» Энтони Кристофер (июль 1991 г.). Руководство по портативным калькуляторам и компьютерам HP (5-е изд.). HHC 2011. ISBN  978-1-88884030-8 . 1888840307. RPL расшифровывается как Reverse Polish Lisp — он сочетает в себе язык калькулятора RPN более ранних моделей с особенностями языков программирования Lisp и Forth . Какое-то время HP объясняла буквы RPL как аббревиатуру от «процедурного языка на основе ПЗУ».
  25. ^ «HP отмечает 35-летие инноваций в области портативных калькуляторов» . Hewlett-Packard Development Company, LP, 2007 г. Архивировано из оригинала 17 марта 2007 г. Проверено 13 сентября 2015 г. 1987: HP-28C : Первый полнофункциональный калькулятор RPL. В конце 1980-х годов компания HP разработала новый язык программирования для своей новой серии чрезвычайно мощных калькуляторов. Объединив элементы RPN, Lisp и Forth , HP разработала язык под названием RPL (или процедурный язык на основе ПЗУ).
  26. ^ Рехлин, Эрик; Марангон, Карлос. «HPedia: Энциклопедия калькуляторов HP» . www.hpcalc.org . Проверено 20 апреля 2020 г.

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6b14310fc62079643febf8d7614faf3a__1716880200
URL1:https://arc.ask3.ru/arc/aa/6b/3a/6b14310fc62079643febf8d7614faf3a.html
Заголовок, (Title) документа по адресу, URL1:
RPL (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)