RPL (язык программирования) - RPL (programming language)
Парадигма | Стек , структурированный , объектно-ориентированный |
---|---|
Разработано | Фирма Хьюлет-Паккард |
Впервые появился | 1984 (1986) |
Операционные системы | Калькуляторы HP |
Диалекты | |
Системная РПЛ, Пользовательская РПЛ | |
Под влиянием | |
РПН , Форт , Лисп |
RPL - это операционная система портативного калькулятора и язык прикладного программирования, используемый в калькуляторах RPN (обратной польской нотации) Hewlett-Packard для построения научных графиков серий HP 28 , 48 , 49 и 50 , но его также можно использовать на калькуляторах без RPN, такие как серии 38 , 39 и 40 .
RPL - это структурированный язык программирования, основанный на RPN, но в равной степени способный обрабатывать алгебраические выражения и формулы, реализованный как многопоточный интерпретатор . RPL имеет много общего с Forth , оба языка основаны на стеке , а также на LISP на основе списков . В отличие от предыдущих калькуляторов HP RPN, которые имели фиксированный четырехуровневый стек , стек, используемый RPL, ограничен только доступной оперативной памятью калькулятора .
RPL возникла в 1984 году в центре разработки HP в Корваллисе, штат Орегон , как замена предыдущей практики реализации операционных систем калькуляторов на языке ассемблера . Последний карманный калькулятор с поддержкой RPL, HP 50g, был снят с производства в 2015 году. Однако существует несколько эмуляторов, которые могут эмулировать калькуляторы HP RPL, которые работают в различных операционных системах и устройствах, включая смартфоны iOS и Android.
Варианты
Внутренний низко- и среднеуровневый вариант 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 condition THEN if-true [ELSE if-false] END
В следующем примере проверяется, равно ли число внизу стопки «1», и если да, то заменяется на «Равно единице»:
« IF 1 == THEN "Equal to one" END »
Конструкция IF оценивает условие, а затем проверяет результат в нижней части стека. В результате RPL может дополнительно поддерживать блоки IF в стиле FORTH, позволяя определять условие перед блоком. Если оставить условие пустым, оператор IF не будет вносить никаких изменений в стек во время выполнения условия и будет использовать существующий результат в нижней части стека для теста:
« 1 == IF THEN "Equal to one" END »
IFT / IFTE
Условное тестирование Postfix может выполняться с помощью функций IFT («если-то») и IFTE («если-то-еще»).
IFT и IFTE извлекают из стека две или три команды соответственно. Самое верхнее значение оценивается как логическое, и, если оно истинно, второе верхнее значение помещается обратно в стек. IFTE допускает третье значение «else», которое будет помещено обратно в стек, если логическое значение ложно.
В следующем примере функция IFT используется для извлечения объекта из нижней части стека и, если он равен 1, заменяет его на «One»:
« 1 == "One" IFT »
В следующем примере функция IFTE используется для извлечения объекта из нижней части стека и, если он равен 1, заменяет его на «One». Если он не равен 1, он заменяет его строкой «Not one»:
« 1 == "One" "Not one" IFTE »
IFT и IFTE будут оценивать программный блок, указанный в качестве одного из его аргументов, что позволяет использовать более компактную форму условной логики, чем структура IF / THEN / ELSE / END. В следующем примере объект извлекается из нижней части стека и заменяется на «Один», «Меньше» или «Больше», в зависимости от того, равно ли он, меньше или больше 1.
« DUP 1 == « DROP "One" » « 1 < "Less" "More" IFTE » IFTE »
ДЕЛО / ТО / КОНЕЦ
Для поддержки более сложной условной логики RPL предоставляет структуру CASE / THEN / END для обработки нескольких эксклюзивных тестов. Будет выполнена только одна из ветвей внутри оператора CASE. Базовый синтаксис этого блока:
CASE condition_1 THEN if-condition_1 END ... condition_n THEN if-condition_n END if-none END
Следующий код иллюстрирует использование блока CASE / THEN / END. Если в конце стека находится буква, она заменяет ее строковым эквивалентом или «Неизвестной буквой»:
« CASE DUP "A" == THEN "Alpha" END DUP "B" == THEN "Beta" END DUP "G" == THEN "Gamma" END "Unknown letter" END SWAP DROP @ Get rid of the original letter »
Этот код идентичен следующему вложенному эквиваленту блока IF / THEN / ELSE / END:
« IF DUP "A" == THEN "Alpha" ELSE IF DUP "B" == THEN "Beta" ELSE IF DUP "G" == THEN "Gamma" ELSE "Unknown letter" END END END SWAP DROP @ Get rid of the original letter »
Циклические заявления
FOR / NEXT
RPL предоставляет оператор FOR / NEXT для перехода от одного индекса к другому. Индекс цикла хранится во временной локальной переменной, к которой можно получить доступ в цикле. Синтаксис блока FOR / NEXT:
index_from index_to FOR variable_name loop_statement NEXT
В следующем примере цикл FOR используется для суммирования чисел от 1 до 10. Переменной индекса цикла FOR является «I»:
« 0 @ Start with zero on the stack 1 10 @ Loop from 1 to 10 FOR I @ "I" is the local variable I + @ Add "I" to the running total NEXT @ Repeat... »
НАЧАЛО / СЛЕДУЮЩИЙ
Блок START / NEXT используется для простого блока, который выполняется от начального индекса до конечного индекса. В отличие от цикла FOR / NEXT, переменная цикла недоступна. Синтаксис блока START / NEXT:
index_from index_to START loop_statement NEXT
FOR / STEP и START / STEP
И FOR / NEXT, и START / NEXT поддерживают определяемое пользователем приращение шага. При замене завершающего ключевого слова NEXT на инкремент и ключевое слово STEP переменная цикла будет увеличиваться или уменьшаться на другое значение, отличное от значения по умолчанию +1. Например, следующий цикл отступает от 10 до 2, уменьшая индекс цикла на 2:
« 10 2 START -2 STEP »
WHILE / REPEAT / END
Блок WHILE / REPEAT / END в RPL поддерживает неопределенный цикл с проверкой условия в начале цикла. Синтаксис блока WHILE / REPEAT / END:
WHILE condition REPEAT loop_statement END
DO / UNTIL / END
Блок DO / UNTIL / END в RPL поддерживает неопределенный цикл с проверкой условий в конце цикла. Синтаксис блока DO / UNTIL / END:
DO loop_statement UNTIL condition END
Заметки
- 1. ^ "RPL" произошел от Reverse Polish Lisp согласно его первоначальным разработчикам, в то время как в течение короткого времени в 1987 году отдел маркетинга HP пытался придумать для него процедурный язык на основе бэкронима, основанный на ПЗУ . Кроме того, инициалы RPL иногда интерпретируются как обратная польская логика или обратный польский язык, но эти названия не являются официальными.
Смотрите также
- Язык программирования (APL)
- ФОКУСНОЕ программирование нажатия клавиш
- Язык высокой производительности (HPL)
- Триграфы HP
- Основной язык программирования (PPL)
- Набор символов RPL
Рекомендации
дальнейшее чтение
- Серия HP 48G - Руководство пользователя (8-е изд.). Hewlett-Packard . Декабрь 1994 [1993]. HP 00048-90126, (00048-90104). Архивировано 6 августа 2016 года . Проверено 6 сентября 2015 . [2]
- Серия HP 48G - Справочное руководство для опытных пользователей (AUR) (4-е изд.). Hewlett-Packard . Декабрь 1994 [1993]. HP 00048-90136, 0-88698-01574-2. Архивировано 6 августа 2016 года . Проверено 6 сентября 2015 . [3]
- Руководство пользователя графического калькулятора HP 50g (1-е изд.). Hewlett-Packard . Апрель 2006 г. HP F2229AA-90006 . Проверено 6 сентября 2015 .
- Расширенное руководство пользователя графического калькулятора HP 50g / 49g + / 48gII (AUR) (2-е изд.). Hewlett-Packard . 2009-07-14 [2005]. HP F2228-90010 . Проверено 6 сентября 2015 .
- Калиновски, Эдуардо де Маттос; Доминик, Карстен (2002-04-24) [1998-07-12]. Программирование в Системе РПЛ (PDF) (2-е изд.). Архивировано (PDF) из оригинала на 14 января 2016 года . Проверено 16 августа 2016 .(Старая версия: [4] )
- Доннелли, Джеймс (2009-03-01). Рехлин, Эрик (ред.). Введение в HP 48 System RPL и программирование на языке ассемблера . Проверено 7 сентября 2015 .
Внешние ссылки
- Рехлин, Эрик (2015) [1997]. «Файлы документации по программированию HP 49/50» . Архив калькулятора HP . Проверено 12 сентября 2015 .
- Рехлин, Эрик (2015) [1997]. «Файлы документации по программированию HP 48» . Архив калькулятора HP . Проверено 12 сентября 2015 .
- Хикс, Дэвид Г. (2013) [1995]. «РПЛ» . Музей калькуляторов HP (MoHPC) . Проверено 12 сентября 2015 .
- Бертран, Жоэль (2015) [2009]. «РПЛ / 2 - новый обратный польский лисп» . Проверено 12 сентября 2015 . (клон RPL под лицензией GPL)
- Лапилли, Клаудио Даниэль (2014-01-03). «новыйРПЛ» . Проверено 12 сентября 2015 . [5] (производная RPL с открытым исходным кодом для HP 50g и HP 49g +, а также для HP 40gs , HP 39gs и hp 39g + )
- Рубет, Луи (2017-07-01). «rpn - реализация RPL с открытым кодом» . Проверено 12 сентября 2015 . (Реализация RPL с открытым исходным кодом с произвольной точностью)
- Суарес, Альваро Херардо (01.05.2018). «MyRPL - Союз языков HP41 и HP48» . Проверено 4 мая 2018 . (Смешанный язык RPL (HP48) и FOCAL (HP41))