
RPLes un sistema operativo y lenguaje de programación de aplicaciones para calculadoras portátiles utilizado 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 usar en calculadoras que no son RPN, como las series 38 , 39 y 40. Internamente, también fue utilizado por las 17B , 18C , 19B y 27S . [ 3 ]
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 multihilo . [ 4 ] RPL tiene muchas similitudes con Forth , ya que ambos lenguajes se basan en pilas , al igual que LISP, que se basa en listas . A diferencia de las calculadoras HP RPN anteriores, que tenían una pila fija de cuatro niveles , la pila dinámica utilizada por RPL solo está limitada por la RAM disponible , y la calculadora muestra un mensaje de error cuando se queda sin memoria en lugar de descartar silenciosamente los argumentos de la pila como en las pilas RPN de tamaño fijo. [ 5 ]
RPL se originó en el centro de desarrollo de HP en Corvallis, Oregón, en 1984 como reemplazo de la práctica anterior de implementar los sistemas operativos de las calculadoras en lenguaje ensamblador . [ 3 ] La primera calculadora que lo utilizó internamente fue la HP-18C y la primera calculadora que lo puso a disposición de los usuarios fue la HP-28C, ambas de 1986. [ 6 ] [ 3 ] La última calculadora de bolsillo que soportaba RPL, la HP 50g, se descontinuó en 2015. [ 7 ] [ 8 ] [ 9 ] 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 teléfonos inteligentes iOS y Android.También existen varios proyectos comunitarios para recrear y extender RPL en calculadoras más nuevas, como newRPL [ 10 ] [ 11 ] o DB48X, [ 12 ] [ 13 ] que pueden agregar características o mejorar el rendimiento. [ 14 ]
Variants
The internal low- to medium-level variant of RPL, called System RPL (or SysRPL) is used on some earlier HP calculators as well as the aforementioned ones, as part of their operating system implementation language. In the HP 48 series this variant of RPL is not accessible to the calculator user without the use of external tools, but in the HP 49/50 series there is a compiler built into ROM to use SysRPL. It is possible to cause a serious crash while coding in SysRPL, so caution must be used while using it. The high-level User RPL (or UserRPL) version of the language is available on said graphing calculators for developing textual as well as graphical application programs. All UserRPL programs are internally represented as SysRPL programs, but use only a safe subset of the available SysRPL commands. The error checking that is a part of UserRPL commands, however, makes UserRPL programs noticeably slower than equivalent SysRPL programs. The UserRPL command SYSEVAL tells the calculator to process designated parts of a UserRPL program as SysRPL code.
Control blocks
RPL control blocks are not strictly postfix. Although there are some notable exceptions, the control block structures appear as they would in a standard infix language. The calculator manages this by allowing the implementation of these blocks to skip ahead in the program stream as necessary.
Conditional statements
IF/THEN/ELSE/END
RPL supports basic conditional testing through the IF/THEN/ELSE structure. The basic syntax of this block is:
IF condition THEN if-true [ELSE if-false] END
The following example tests to see if the number at the bottom of the stack is "1" and, if so, replaces it with "Equal to one":
« IF 1 == THEN "Equal to one" END »
The IF construct evaluates the condition then tests the bottom of the stack for the result. As a result, RPL can optionally support FORTH-style IF blocks, allowing the condition to be determined before the block. By leaving the condition empty, the IF statement will not make any changes to the stack during the condition execution and will use the existing result at the bottom of the stack for the test:
« 1 == IF THEN "Equal to one" END »
IFT/IFTE
Postfix conditional testing may be accomplished by using the IFT ("if-then") and IFTE ("if-then-else") functions.
IFT and IFTE pop two or three commands off the stack, respectively. The topmost value is evaluated as a Boolean and, if true, the second topmost value is pushed back on the stack. IFTE allows a third "else" value that will be pushed back on the stack if the Boolean is false.
The following example uses the IFT function to pop an object from the bottom of the stack and, if it is equal to 1, replaces it with "One":
« 1 == "One" IFT »
El siguiente ejemplo utiliza la función IFTE para extraer un objeto del fondo de la pila y, si es igual a 1, lo reemplaza con "One". Si no es igual a 1, lo reemplaza con la cadena "Not one".
« 1 == "Uno" "No uno" IFTE »
Las funciones IFT e IFTE evalúan un bloque de programa que se le pasa como argumento, lo que permite una lógica condicional más compacta que la estructura IF/THEN/ELSE/END. El siguiente ejemplo extrae un objeto del fondo 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/ENTONCES/FIN
Para admitir una lógica condicional más compleja, RPL proporciona la estructura CASE/THEN/END para manejar múltiples pruebas excluyentes. Solo se ejecutará una de las ramas dentro de la instrucción CASE. La sintaxis básica de este bloque es:
CASO condición_1 ENTONCES si-condición_1 FIN ... condición_n ENTONCES si-condición_n FIN si-ninguno FIN
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 con "Letra desconocida":
« CASO DUP "A" == ENTONCES "Alfa" FIN DUP "B" == ENTONCES "Beta" FIN DUP "G" == ENTONCES "Gamma" FIN "Carta desconocida" FIN INTERCAMBIO DERROTA @ Deshazte de la carta original »
Este código es idéntico al siguiente bloque anidado IF/THEN/ELSE/END equivalente:
« SI DUP "A" == ENTONCES "Alfa" DEMÁS SI DUP "B" == ENTONCES "Beta" DEMÁS SI DUP "G" == ENTONCES "Gama" DEMÁS "Carta desconocida" FIN FIN FIN INTERCAMBIO DERROTA @ Deshazte de la carta original »
Sentencias de bucle
PARA/SIGUIENTE
RPL proporciona una instrucción FOR/NEXT para iterar desde un índice a otro. El índice del bucle se almacena en una variable local temporal a la que se puede acceder dentro del bucle. La sintaxis del bloque FOR/NEXT es:
índice_desde índice_hasta PARA nombre_variable instrucción_bucle SIGUIENTE
El siguiente ejemplo utiliza el bucle FOR para sumar los números del 1 al 10. La variable de índice del bucle FOR es "I":
« 0 @ Comienza con cero en la pila 1 10 @ Bucle del 1 al 10 PARA I @ "I" es la variable local Yo + @ Añadir "Yo" al total acumulado SIGUIENTE @ Repetir... »
INICIO/SIGUIENTE
El bloque START/NEXT se utiliza para un bloque simple que se ejecuta desde un índice de inicio hasta un índice de fin. A diferencia del bucle FOR/NEXT, la variable de bucle no está disponible. La sintaxis del bloque START/NEXT es:
índice_desde índice_hasta INICIO instrucción_bucle SIGUIENTE
PARA/PASO y COMENZAR/PASO
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 del bucle se incrementará o decrementará en un valor diferente al predeterminado de +1. Por ejemplo, el siguiente bucle retrocede de 10 a 2 decrementando el índice del bucle en 2:
« 10 2 INICIO -2 PASOS »
MIENTRAS/REPETIR/FIN
El bloque WHILE/REPEAT/END en RPL admite un bucle indefinido con la prueba de condición al inicio del bucle. La sintaxis del bloque WHILE/REPEAT/END es:
MIENTRAS condición REPETIR instrucción_bucle FIN
HACER/HASTA/FINALIZAR
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 UNTIL condition END
Véase también
Notas
- 1. ^ "RPL" deriva de Reverse Polish Lisp según sus desarrolladores originales, [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] mientras que durante un breve período en 1987 el departamento de marketing de HP intentó acuñar el acrónimo inverso ROM-based Procedural Language para él. [ 2 ] [ 20 ] [ 21 ] Además, las iniciales RPL a veces se interpretan incorrectamente como Reverse Polish Logic o Reverse Polish Language . [ 22 ]
Referencias
- ↑ "¿El placer de programar?" . Museo de Calculadoras HP. 2020. Archivado del original el 3 de diciembre de 2021.
- 1 2 Patton, Charles M. (agosto de 1987). "Cálculo para calculadoras de mano" (PDF) . Hewlett-Packard Journal . 38 (8). Palo Alto, California, EE. UU.: Hewlett-Packard Company : 21–25 . Archivado del original (PDF) el 6 de diciembre de 2011. Recuperado el 12 de septiembre de 2015 .
- 1 2 3 Hewlett-Packard . "RPLMan del disco Goodies 4" (RPLMAN.ZIP) . Recuperado el 12-09-2015 .
- ↑ Horn, Joseph K. "¿Qué es RPL?" . Archivado del original el 17-09-2017 . Recuperado el 17-09-2017 .
- ↑ Wessman, Timothy "Tim" James (21-06-2016) [20-06-2016]. "¿Qué hacer con stack overflow OBJ->/LIST->?" . MoHPC - El Museo de Calculadoras HP . Archivado del original el 24-09-2023 . Recuperado el 24-09-2023 .
- ↑ Wickes, William C. (enero-febrero de 1987). "La HP-28C: una perspectiva interna". HPX Exchange . 1 (1).
- ↑ Kuperus, Klaas (04-03-2015). "HP 50g: Fin de una era" . Moravia. Archivado del original el 02-04-2015.
- ↑ Kuperus, Klaas (6 de marzo de 2015). "¿HP 50g no es una buena noticia?" . Moravia . Consultado el 1 de enero de 2016 .
- ↑ Wessman, Timothy "Tim" James (26 de diciembre de 2015). "Windows 10 no permite la instalación de controladores USB HP 50g" . MoHPC - El Museo de Calculadoras HP . Consultado el 1 de enero de 2016 .
- ↑ Lapilli, Claudio Daniel (3 de enero de 2014). "nuevoRPL" . Consultado el 12 de septiembre de 2015 .(una biblioteca RPL de código abierto derivada para las impresoras HP 50g y HP 49g+ , HP 40gs , HP 39gs y HP 39g+, así como para la HP Prime )
- ↑ Lapilli, Claudio Daniel (23-07-2021) [2014]. "Proyecto de documentación newRPL" . newRPL . Archivado del original el 03-11-2023 . Recuperado el 23-10-2023 .
- ↑ de Dinechin, Christophe (2022). "DB48X en DM42: entorno de ejecución RPL para la calculadora DM42, al estilo de HP48/49/50" . DB48X . Archivado del original el 3 de noviembre de 2023. Consultado el 23 de octubre de 2023 .
- ↑ de Dinechin, Christophe (2023-02-03). "Reviviendo Reverse Polish Lisp: Construyendo una calculadora tipo HP48 de código abierto" . FOSDEM . Archivado del original el 2023-10-03 . Recuperado el 2023-10-03 .(Nota: Existe una versión mejorada de RPL llamada DB48X para los SwissMicros DM42 y DM32 ).
- ↑ Lapilli, Claudio Daniel (31-10-2014). "N-Queens en 50g (lenguaje RPL)" . MoHPC - El Museo de Calculadoras HP . Archivado del original el 03-11-2023 . Recuperado el 23-10-2023 .
- ↑ Wickes, William C. (1988-10-01) [14–18 de junio de 1988]. Forsely, Lawrence P. (ed.). RPL: Un lenguaje de control matemático . Actas de la Conferencia Forth de Rochester de 1988: Entornos de programación. Vol. 8. Rochester, Nueva York, EE. UU.: Institute for Applied Forth Research, Inc., Universidad de Rochester . págs. 27–32 . ISBN 978-0-91459308-9OCLC 839704944.
Se consideraron varios sistemas operativos y lenguajes existentes, pero ninguno cumplía con todos los objetivos de diseño. Por lo tanto, se desarrolló un nuevo sistema que combina la interpretación multihilo de
Forth conel
enfoque funcional de
Lisp
. El sistema operativo resultante, conocido extraoficialmente como RPL (por Reverse-Polish Lisp), hizo su primera aparición pública en junio de 1986 en la calculadora
HP-18C
Business Consultant.
(Nota: Este título se cita a menudo como "RPL: Un lenguaje de control matemático". Un extracto está disponible en:)
- ↑ Wickes, William C. (1991-03-11). "RPL significa Reverse Polish Lisp" . www.hpcalc.org . Recuperado el 12 de septiembre de 2015. RPL
significa 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 de los miembros del equipo de desarrollo propuso "RPL", tanto como un juego de palabras con "RPN", que ha sido el sello distintivo amado/odiado de las calculadoras HP desde siempre, como una indicación precisa de la derivación del lenguaje de
Forth
y
Lisp
.
RPL nunca se concibió particularmente como un término público; en el momento del artículo de
HP Journal
(agosto de 1987) sobre la
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 de otra manera que no sea (las iniciales) RPL. Puedes elegir cualquiera de las dos versiones completas que prefieras. ¿O qué tal "Lenguaje de gente rica"? Bill Wickes, HP Corvallis.
- ↑ Schoorl, André (2000-04-04) [1997]. "Lista de preguntas frecuentes sobre la HP48" . Archivo de calculadoras HP. pág. 69. Recuperado el 12 de septiembre de 2015 .
- ↑ "He oído los nombres RPL, Saturn, STAR, GL, etc... ¿Qué son? - RPL" . Preguntas frecuentes: 2 de 4 - Hardware, programas y programación . 4.62. comp.sys.hp48. 14/04/2000. 8.1 . Consultado el 12/09/2015 .
- ↑ Nelson, Richard J. (2012-04-04). "HP RPN Evoluciona" (PDF) . HP Solve (27). Hewlett-Packard : 30–32 . Recuperado el 12 de septiembre de 2015 .
- ^ Mier -Jędrzejowicz, Włodzimierz "Włodek" Anthony Christopher (julio de 1991). Una guía para calculadoras y computadoras portátiles HP (5 ed.). HHC 2011. ISBN 978-1-88884030-8. 1888840307.
RPL significa Reverse Polish Lisp (Lisp Polaco Inverso): 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 "ROM-based Procedural Language" (Lenguaje de Procedimientos Basado en ROM).
- ↑ "HP celebra 35 años de innovación en calculadoras de mano" . Hewlett-Packard Development Company, LP 2007. Archivado del original el 17 de marzo de 2007. Recuperado 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 procedimental basado en ROM).
- ↑ Rechlin, Eric; Marangon, Carlos. "HPedia: La enciclopedia de calculadoras HP" . www.hpcalc.org . Consultado el 20 de abril de 2020 .
Lecturas adicionales
- HP Serie 48G – Guía del usuario (UG) (8.ª ed.). Hewlett-Packard . Diciembre de 1994 [1993]. HP 00048-90126, (00048-90104). Archivado del original el 6 de agosto de 2016. Consultado el 6 de septiembre de 2015 .
- HP Serie 48G – Manual de referencia avanzada para el usuario (AUR) (4.ª ed.). Hewlett-Packard . Diciembre de 1994 [1993]. HP 00048-90136, 0-88698-01574-2. Archivado del original el 6 de agosto de 2016. Consultado el 6 de septiembre de 2015 .
- Manual de usuario de la calculadora gráfica HP 50g (1.ª ed.). Hewlett-Packard . Abril de 2006. HP F2229AA-90006 . Consultado el 6 de septiembre de 2015 .
- Manual de referencia del usuario avanzado (AUR) de la calculadora gráfica HP 50g / 49g+ / 48gII (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-04-2002) [12-07-1998]. Programación en System RPL (PDF) (2.ª ed.). Archivado (PDF) del original el 14-01-2016 . Recuperado el 16-08-2016 .(Versión anterior:)
- 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. Recuperado el 7 de septiembre de 2015 .
Enlaces externos
- Rechlin, Eric (2015) [1997]. "Archivos de documentación de programación HP 49/50" . Archivo de calculadoras HP . Recuperado el 12 de septiembre de 2015 .
- Rechlin, Eric (2015) [1997]. "Archivos de documentación de programación de HP 48" . Archivo de calculadoras HP . Recuperado el 12 de septiembre de 2015 .
- Hicks, David G. (2013) [1995]. "RPL" . El Museo de Calculadoras HP (MoHPC). Archivado del original el 30 de septiembre de 2023. Recuperado el 12 de septiembre de 2015 .
- Bertrand, Joël (2015) [2009]. "RPL/2 - un nuevo Lisp polaco inverso" . Recuperado el 12 de septiembre de 2015 .(un clon de RPL con licencia GPL)
- Rubet, Louis (2017-07-01). "rpn - implementación de código abierto de RPL" . GitHub . Recuperado el 2015-09-12 .(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 los lenguajes HP41 y HP48" . Archivado del original el 3 de octubre de 2023. Recuperado el 4 de mayo de 2018 .(Lenguaje mixto RPL (HP48) y FOCAL (HP41))
- Software para calculadoras gráficas
- Calculadoras HP
- Familia de lenguajes de programación Lisp
- Lenguajes de programación orientados a pilas