RPL [1] es un sistema operativo de calculadora de mano y un lenguaje de programación de aplicaciones que se utiliza en las calculadoras gráficas científicas RPN (notación polaca inversa) de Hewlett-Packard de las series HP 28 , 48 , 49 y 50 , pero también se puede utilizar en Calculadoras RPN, como las series 38 , 39 y 40 .
Paradigma | Apilado , estructurado , orientado a objetos |
---|---|
Diseñada por | Hewlett Packard |
Apareció por primera vez | 1984 (1986) |
SO | Calculadoras HP |
Dialectos | |
RPL del sistema, RPL del usuario | |
Influenciado por | |
RPN , cuarto , Lisp [1] |
RPL es un lenguaje de programación estructurado basado en RPN, pero igualmente capaz de procesar expresiones y fórmulas algebraicas , implementado como un intérprete de subprocesos . [2] RPL tiene muchas similitudes con Forth , ambos lenguajes están basados en pilas , así como LISP basado en listas . A diferencia de las calculadoras HP RPN anteriores, que tenían una pila fija de cuatro niveles , la pila utilizada por RPL solo está limitada por la RAM disponible de la calculadora .
RPL se originó en las instalaciones de desarrollo de HP en Corvallis, Oregon , en 1984, como un reemplazo de la práctica anterior de implementar los sistemas operativos de calculadoras en lenguaje ensamblador . [3] La última calculadora de bolsillo compatible con RPL, la HP 50g, se suspendió en 2015. [4] [5] [6] Sin embargo, existen múltiples emuladores que pueden emular las calculadoras RPL de HP que se ejecutan en una variedad de sistemas operativos y dispositivos. , incluidos los teléfonos inteligentes iOS y Android.
Variantes
La variante interna de nivel bajo a medio de RPL, llamada System RPL (o SysRPL ) se usa en algunas calculadoras HP anteriores, así como en las mencionadas anteriormente, como parte del lenguaje de implementación de su sistema operativo . En la serie HP 48, el usuario de la calculadora no puede acceder a esta variante de RPL sin el uso de herramientas externas, pero en la serie HP 49/50 hay un compilador integrado en la ROM para usar SysRPL. Es posible causar un bloqueo grave al codificar en SysRPL, por lo que se debe tener cuidado al usarlo. La versión de alto nivel User RPL (o UserRPL ) del idioma está disponible en dichas calculadoras gráficas para desarrollar programas de aplicación tanto textuales como gráficos. Todos los programas UserRPL están representados internamente como programas SysRPL, pero usan solo un subconjunto seguro de los comandos SysRPL disponibles. Sin embargo, la comprobación de errores que forma parte de los comandos UserRPL hace que los programas UserRPL sean notablemente más lentos que los programas SysRPL equivalentes. El comando UserRPL SYSEVAL le dice a la calculadora que procese partes designadas de un programa UserRPL como código SysRPL.
Bloques de control
Los bloques de control RPL no son estrictamente postfijos . Aunque hay algunas excepciones notables, las estructuras de bloques de control aparecen como lo harían en un lenguaje infijo estándar. La calculadora gestiona esto permitiendo que la implementación de estos bloques avance en el flujo del programa según sea necesario.
Declaraciones condicionales
SI / ENTONCES / ELSE / FIN
RPL admite pruebas condicionales básicas a través de la estructura IF / THEN / ELSE. La sintaxis básica de este bloque es:
SI condición ENTONCES if-true [ELSE if-false] END
El siguiente ejemplo prueba para ver si el número en la parte inferior de la pila es "1" y, si es así, lo reemplaza con "Igual a uno":
«SI 1 == ENTONCES" Igual a uno "FIN»
La construcción IF evalúa la condición y luego prueba el resultado en la parte inferior de la pila. Como resultado, RPL puede admitir opcionalmente bloques IF de estilo FORTH, lo que permite que la condición se determine antes del bloque. Al dejar la condición vacía, la declaración IF no realizará ningún cambio en la pila durante la ejecución de la condición y usará el resultado existente en la parte inferior de la pila para la prueba:
«1 == SI ENTONCES" Igual a uno "FIN»
IFT / IFTE
La prueba condicional de sufijo se puede realizar utilizando las funciones IFT ("si-entonces") e IFTE ("si-entonces-si no").
IFT e IFTE sacan dos o tres comandos de la pila, respectivamente. El valor superior se evalúa como booleano y, si es verdadero, el segundo valor superior se devuelve a la pila. IFTE permite un tercer valor "else" que se volverá a colocar en la pila si el booleano es falso.
El siguiente ejemplo usa la función IFT para sacar un objeto de la parte inferior de la pila y, si es igual a 1, lo reemplaza con "Uno":
«1 ==" Uno "IFT»
El siguiente ejemplo usa la función IFTE para sacar un objeto de la parte inferior de la pila y, si es igual a 1, lo reemplaza con "Uno". Si no es igual a 1, lo reemplaza con la cadena "Ninguno":
«1 ==" Uno "" Ninguno "IFTE»
IFT e IFTE evaluarán un bloque de programa dado como uno de sus argumentos, permitiendo una forma más compacta de lógica condicional que una estructura IF / THEN / ELSE / END. El siguiente ejemplo saca un objeto de la parte inferior de la pila y lo reemplaza con "Uno", "Menos" o "Más", según sea igual, menor o mayor que 1.
« DUP 1 == «DROP" One "» «1 <" Menos "" Más "IFTE» IFTE »
CASO / LUEGO / FIN
Para admitir una lógica condicional más compleja, RPL proporciona la estructura CASE / THEN / END para manejar múltiples pruebas exclusivas. Solo se ejecutará una de las ramas dentro de la instrucción CASE. La sintaxis básica de este bloque es:
CASO condition_1 THEN if-condition_1 END ... condition_n THEN if-condition_n END si-ninguno FINAL
El siguiente código ilustra el uso de un bloque CASE / THEN / END. Dada una letra en la parte inferior de la pila, la reemplaza con su cadena equivalente o "Letra desconocida":
« CASO DUP "A" == LUEGO "Alpha" END DUP "B" == LUEGO "Beta" FIN DUP "G" == LUEGO "Gamma" END "Letra desconocida" FINAL SWAP DROP @ Deshazte de la letra original »
Este código es idéntico al siguiente bloque anidado IF / THEN / ELSE / END equivalente:
« SI DUP "A" == LUEGO "Alfa" DEMÁS SI DUP "B" == ENTONCES "Beta" DEMÁS SI DUP "G" == ENTONCES "Gama" DEMÁS "Letra desconocida" FINAL FINAL FINAL SWAP DROP @ Deshazte de la letra original »
Declaraciones en bucle
PARA / SIGUIENTE
RPL proporciona una instrucción FOR / NEXT para pasar de un índice a otro. El índice del bucle se almacena en una variable local temporal a la que se puede acceder en el bucle. La sintaxis del bloque FOR / NEXT es:
index_from index_to FOR variable_name loop_statement NEXT
El siguiente ejemplo usa el bucle FOR para sumar los números del 1 al 10. La variable de índice del bucle FOR es "I":
« 0 @ Empiece con cero en la pila 1 10 @ Bucle de 1 a 10 FOR I @ "I" es la variable local I + @ Agregar "I" al total acumulado SIGUIENTE @ Repetir ... »
INICIO / SIGUIENTE
El bloque INICIO / SIGUIENTE se utiliza para un bloque simple que se ejecuta desde un índice inicial hasta un índice final. A diferencia del bucle FOR / NEXT, la variable de bucle no está disponible. La sintaxis del bloque START / NEXT es:
index_from index_to START loop_statement SIGUIENTE
FOR / STEP y START / STEP
Tanto FOR / NEXT como START / NEXT admiten un incremento de paso definido por el usuario. Al reemplazar la palabra clave NEXT de terminación con un incremento y la palabra clave STEP, la variable de bucle aumentará o disminuirá en un valor diferente al predeterminado de +1. Por ejemplo, el siguiente bucle retrocede de 10 a 2 disminuyendo el índice del bucle en 2:
«10 2 INICIO -2 PASO»
MIENTRAS / REPETIR / FIN
El bloque WHILE / REPEAT / END en RPL admite un bucle indefinido con la prueba de condición al comienzo del bucle. La sintaxis del bloque WHILE / REPEAT / END es:
WHILE condición REPEAT loop_statement END
HACER / HASTA / FIN
El bloque DO / UNTIL / END en RPL admite un bucle indefinido con la prueba de condición al final del bucle. La sintaxis del bloque DO / UNTIL / END es:
DO loop_statement HASTA que la condición END
Notas
- 1. ^ "RPL" se deriva de Reverse Polish Lisp según sus desarrolladores originales, [7] [8] [9] [10] [11] [12] mientras que durante un corto tiempo en 1987 el marketing de HP intentó acuñar el backronym Lenguaje de procedimiento basado en ROM para ello. [1] [12] [13] Además, las iniciales RPL a veces se interpretan como Lógica polaca inversa o Lengua polaca inversa, pero estos nombres no son oficiales. [14]
Ver también
- Un lenguaje de programación (APL)
- Programación de pulsaciones de teclas FOCAL
- Lenguaje de alto rendimiento (HPL)
- Trígrafos HP
- Lenguaje de programación Prime (PPL)
- Juego de caracteres RPL
Referencias
- ↑ a b Patton, Charles M. (agosto de 1987). "Computación para calculadoras de mano" (PDF) . Diario de Hewlett-Packard . Palo Alto, California, EE.UU .: Hewlett-Packard Company . 38 (8): 21-25 . Consultado el 12 de septiembre de 2015 .
- ^ Horn, Joseph K. "¿Qué es RPL?" . Archivado desde el original el 17 de septiembre de 2017 . Consultado el 17 de septiembre de 2017 .
- ^ Hewlett-Packard . "RPLMan de Goodies Disk 4" (RPLMAN.ZIP) . Consultado el 12 de septiembre de 2015 .
- ^ Kuperus, Klaas (4 de marzo de 2015). "HP 50g: Fin de una era" . Moravia. Archivado desde el original el 2 de abril de 2015.
- ^ Kuperus, Klaas (6 de marzo de 2015). "¿HP 50g no son tan buenas noticias?" . Moravia . Consultado el 1 de enero de 2016 .
- ^ Wessman, Timothy James (26 de diciembre de 2015). "Windows 10 no permitirá que se instalen controladores USB HP 50g" . Museo HP . Consultado el 1 de enero de 2016 .
- ^ Wickes, William C. (1988). RPL: un lenguaje de control matemático . Actas de la cuarta conferencia de Rochester sobre entornos de programación . Rochester, Nueva York, EE. UU.: Instituto de Investigación Aplicada Forth, Inc. págs. 27–32.
Se consideraron varios sistemas operativos e idiomas existentes, pero ninguno pudo cumplir con todos los objetivos de diseño. Por lo tanto, se desarrolló un nuevo sistema, que fusiona la interpretación de Forth con el enfoque funcional de Lisp . El sistema operativo resultante, conocido extraoficialmente como RPL (para Reverse-Polish Lisp), hizo su primera aparición pública en junio de 1986 en la calculadora HP-18C Business Consultant.
- ^ Wickes, William C. (11 de marzo de 1991). "RPL significa Lisp polaco inverso" . www.hpcalc.org . Consultado el 12 de septiembre de 2015 .
RPL son las siglas de Reverse Polish Lisp. En los primeros días del desarrollo de RPL, nos cansamos de llamar al sistema sin nombre "el nuevo sistema", y uno del equipo de desarrollo ideó "RPL", tanto como un juego de "RPN", que ha sido el amado / odiado sello distintivo de HP calcula para siempre, y como una indicación precisa de la derivación del lenguaje de Forth y Lisp .
RPL nunca tuvo la intención de ser un término público; en el momento del artículo del HP Journal (agosto de 1987) sobre el HP 28C hubo un intento de crear un nombre menos caprichoso, de ahí "lenguaje procedimental basado en ROM", que conservaba las iniciales pero tenía un sonido más digno. El equipo de desarrollo nunca lo llama otra cosa que (las iniciales) RPL. Puede elegir cualquiera de las dos versiones de palabra completa que prefiera. ¿O qué tal el "lenguaje de la gente rica"? Bill Wickes, HP Corvallis. - ^ Schoorl, André (4 de abril de 2000) [1997]. "Lista de preguntas frecuentes sobre HP48" . Archivo de calculadora HP. pag. 69 . Consultado el 12 de septiembre de 2015 .
- ^ "He escuchado los nombres RPL, Saturno, STAR, GL, etc ... ¿Qué son? - RPL" . Preguntas frecuentes: 2 de 4 - Hardware, programas y programación . 4.62. comp.sys.hp48. 2000-04-14. 8.1 . Consultado el 12 de septiembre de 2015 .
- ^ Nelson, Richard J. (4 de abril de 2012). "HP RPN evoluciona" (PDF) . HP Solve . Hewlett-Packard (27): 30–32 . Consultado el 12 de septiembre de 2015 .
- ^ a b Mier-Jedrzejowicz, Włodek AC (julio de 1991). Una guía de computadoras y calculadoras portátiles HP (5 ed.). HHC 2011. ISBN 978-1888840308. 1888840307.
RPL son las siglas de Reverse Polish Lisp: combinaba el lenguaje de calculadora RPN de modelos anteriores con características de los lenguajes de programación Lisp y Forth . Durante un tiempo, HP explicó las letras RPL como un acrónimo de "lenguaje procedimental basado en ROM".
- ^ "HP celebra 35 años de innovación en calculadoras de mano" . Hewlett-Packard Development Company, LP 2007. Archivado desde el original el 17 de marzo de 2007 . Consultado el 13 de septiembre de 2015 .
1987: HP-28C : Primera calculadora RPL completa: a finales de la década de 1980, HP desarrolló un nuevo lenguaje de programación para su nueva serie de calculadoras extremadamente potentes. Al combinar elementos de RPN, Lisp y Forth , HP creó un lenguaje llamado RPL (o lenguaje de procedimiento basado en ROM).
- ^ Rechlin, Eric; Marangon, Carlos. "HPedia: la enciclopedia de la calculadora HP" . www.hpcalc.org . Consultado el 20 de abril de 2020 .
Otras lecturas
- HP 48G Series - Guía del usuario (UG) (8.a ed.). Hewlett-Packard . Diciembre de 1994 [1993]. HP 00048-90126, (00048-90104). Archivado desde el original el 6 de agosto de 2016 . Consultado el 6 de septiembre de 2015 . [2]
- Serie HP 48G - Manual de referencia del usuario avanzado (AUR) (4ª ed.). Hewlett-Packard . Diciembre de 1994 [1993]. HP 00048-90136, 0-88698-01574-2. Archivado desde el original el 6 de agosto de 2016 . Consultado el 6 de septiembre de 2015 . [3]
- Guía del usuario de la calculadora gráfica HP 50g (UG) (1 ed.). Hewlett-Packard . Abril de 2006. HP F2229AA-90006 . Consultado el 6 de septiembre de 2015 .
- Calculadora gráfica HP 50g / 49g + / 48gII manual de referencia del usuario avanzado (AUR) (2 ed.). Hewlett-Packard . 14 de julio de 2009 [2005]. HP F2228-90010 . Consultado el 6 de septiembre de 2015 .
- Kalinowski, Eduardo de Mattos; Dominik, Carsten (24 de abril de 2002) [12 de julio de 1998]. Programación en System RPL (PDF) (2 ed.). Archivado (PDF) desde el original el 14 de enero de 2016 . Consultado el 16 de agosto de 2016 .(Versión anterior: [4] )
- Donnelly, James (1 de marzo de 2009). Rechlin, Eric (ed.). Introducción a la programación en lenguaje ensamblador y RPL del sistema HP 48 . Consultado el 7 de septiembre de 2015 .
enlaces externos
- Rechlin, Eric (2015) [1997]. "Archivos de documentación de programación HP 49/50" . Archivo de calculadora HP . Consultado el 12 de septiembre de 2015 .
- Rechlin, Eric (2015) [1997]. "Archivos de documentación de programación HP 48" . Archivo de calculadora HP . Consultado el 12 de septiembre de 2015 .
- Hicks, David G. (2013) [1995]. "RPL" . El Museo de Calculadoras HP (MoHPC) . Consultado el 12 de septiembre de 2015 .
- Bertrand, Joël (2015) [2009]. "RPL / 2 - un nuevo Lisp polaco inverso" . Consultado el 12 de septiembre de 2015 . (un clon RPL con licencia GPL)
- Lapilli, Claudio Daniel (3 de enero de 2014). "newRPL" . Consultado el 12 de septiembre de 2015 . [5] (un derivado RPL de código abierto para HP 50g y HP 49g + , así como para HP 40gs , HP 39gs y hp 39g + )
- Rubet, Louis (1 de julio de 2017). "rpn - implementación de código abierto de RPL" . Consultado el 12 de septiembre de 2015 . (Implementación de código abierto de RPL con precisión arbitraria)
- Suárez, Álvaro Gerardo (1 de mayo de 2018). "MyRPL - Unión entre idiomas HP41 y HP48" . Consultado el 4 de mayo de 2018 . (Lenguaje mixto RPL (HP48) y FOCAL (HP41))