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

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

RPL
Paradigm стек, структурированный, объектно-ориентированный
Разработано Hewlett-Packard
Впервые появилось1984 (1986)
OS HP калькуляторы
Диалекты
Системная RPL, Пользовательская RPL
Под влиянием
RPN, Forth, Lisp

RPL - портативный калькулятор используемая операционная система и приложение язык программирования на калькуляторах Hewlett-Packard для создания научных графиков RPN (обратная польская нотация) серий HP 28, 48, 49 и 50, но это также можно использовать на калькуляторах без поддержки RPN, таких как серии 38, 39 и 40.

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

RPL, полученным от HP Corvallis, Oregon средство разработки в 1984 году в качестве замены предыдущей практики реализации операционных систем калькуляторов на языке ассемблера. Последний карманный калькулятор, поддерживающий RPL, HP 50g, был снят с производства в 2015 году. Однако существует несколько эмуляторов, которые могут эмулировать калькуляторы HP RPL, которые работают на различных операционных системах и устройствах, включая смартфоны iOS и Android.

Содержание
  • 1 Варианты
  • 2 Блоки управления
    • 2.1 Условные операторы
      • 2.1.1 IF / THEN / ELSE / END
      • 2.1.2 IFT / IFTE
      • 2.1.3 CASE /THEN/END
    • 2.2 Цикл операторов
      • 2.2.1 FOR / NEXT
      • 2.2.2 START / NEXT
      • 2.2.3 FOR / STEP и START / STEP
      • 2.2.4 WHILE / REPEAT /END
      • 2.2.5 DO / UNTIL / END
  • 3 Примечания
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература
  • 7 Внешние ссылки
Варианты

Внутренний вариант 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 не являются строго постфиксными. Хотя есть некоторые примечательные исключения, структуры управляющих блоков выглядят так же, как в стандартном инфиксном языке. Калькулятор управляет этим, позволяя реализации этих блоков пропускать вперед в потоке программы по мере необходимости.

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

IF / THEN / ELSE / END

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

IF condition THEN if-true [ELSE if-false] END

В следующем примере проверяется, является ли число внизу стека " 1 "и, если да, заменяет его на" Equal to one ":

« IF 1 == THEN "Equal to one" END »

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

«1 == IF THEN» Равно одному «КОНЕЦ»

IFT / IFTE

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

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

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

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

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

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

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

«DUP 1 ==« DROP «One» »« 1 < "Less" "More" IFTE » IFTE »

CASE / THEN / END

Для поддержки более сложной условной логики 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" Неизвестная буква "END SWAP DROP @ Избавьтесь от исходной буквы»

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

«IF DUP" A "== THEN" Alpha "ELSE IF DUP" B "== THEN" Beta "ELSE IF DUP" G "== THEN" Gamma "ELSE" Неизвестная буква " END END END SWAP DROP @ Избавьтесь от исходной буквы »

Цикл операторов

FOR / NEXT

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 »к промежуточной сумме NEXT @ Repeat... »

START / NEXT

Блок 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 пытался придумать для него backronym процедурный язык на основе ROM . Кроме того, инициалы RPL иногда интерпретируются как Reverse Polish Logic или Reverse Polish Language, но эти названия не являются официальными.
См. Также
Ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-06-03 04:55:52
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте