stringtranslate.com

RPL (lenguaje de programación)

Calculadora HP 48G, utiliza RPL

RPL [5] es un sistema operativo de calculadora portátil y un lenguaje de programación de aplicaciones 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 utilizar en calculadoras que no son RPN, como las series 38 , 39 y 40. Internamente, también lo utilizaban las 17B , 18C , 19B y 27S . [7]

RPL es un lenguaje de programación estructurado basado en RPN, pero igualmente capaz de procesar expresiones algebraicas y fórmulas, implementado como un intérprete enhebrado . [8] RPL tiene muchas similitudes con Forth , ambos lenguajes están basados ​​en pila , así como el LISP basado en lista . 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 eliminar silenciosamente los argumentos de la pila como en las pilas RPN de tamaño fijo. [9]

RPL se originó en las instalaciones 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 . [7] 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. [10] [7] La ​​última calculadora de bolsillo compatible con RPL, la HP 50g, se suspendió en 2015. [11] [12] [13] 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.También hay una serie de proyectos comunitarios para recrear y ampliar RPL en calculadoras más nuevas, como newRPL [14] [15] o DB48X , [16] [17] que pueden agregar características o mejorar el rendimiento. [18]

Variantes

La variante interna de bajo a medio nivel de RPL, llamada System RPL (o SysRPL ) se utiliza en algunas calculadoras HP anteriores, así como en las mencionadas anteriormente, como parte de su lenguaje de implementación del sistema operativo . En la serie HP 48, esta variante de RPL no es accesible para el usuario de la calculadora sin el uso de herramientas externas, pero en la serie HP 49/50 hay un compilador integrado en la ROM para utilizar SysRPL. Es posible provocar un fallo grave al codificar en SysRPL, por lo que se debe tener cuidado al utilizarlo. La versión de alto nivel User RPL (o UserRPL ) del lenguaje está disponible en dichas calculadoras gráficas para desarrollar programas de aplicación tanto textuales como gráficos. Todos los programas UserRPL se representan internamente como programas SysRPL, pero utilizan 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 indica 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 postfix . Aunque hay algunas excepciones notables, las estructuras de los 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 se salte hacia adelante en el flujo del programa según sea necesario.

Declaraciones condicionales

SI/ENTONCES/SINO/FIN

RPL admite pruebas condicionales básicas mediante la estructura IF/THEN/ELSE. La sintaxis básica de este bloque es:

SI condición ENTONCES si es verdadero [SINO si es falso] FIN

El siguiente ejemplo prueba 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 determinar la condición 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 utilizará el resultado existente en la parte inferior de la pila para la prueba:

« 1 == SI ENTONCES "Igual a uno" FIN »

IFT/IFTE

Las pruebas condicionales de posfijo se pueden realizar utilizando las funciones IFT ("if-then") e IFTE ("if-then-else").

IFT e IFTE extraen dos o tres comandos de la pila, respectivamente. El valor superior se evalúa como un valor booleano y, si es verdadero, el segundo valor superior se vuelve a colocar en la pila. IFTE permite un tercer valor "else" que se volverá a colocar en la pila si el valor booleano es falso.

El siguiente ejemplo utiliza 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 utiliza la función IFTE para extraer un objeto de la parte inferior de la pila y, si es igual a 1, lo reemplaza por "Uno". Si no es igual a 1, lo reemplaza por la cadena "No uno":

« 1 == "Uno" "No uno" IFTE »

IFT e IFTE evaluarán un bloque de programa dado como uno de sus argumentos, lo que permite una forma más compacta de lógica condicional que una estructura IF/THEN/ELSE/END. El siguiente ejemplo extrae un objeto de la parte inferior de la pila y lo reemplaza con "One", "Less" o "More", según sea igual, menor o mayor que 1.

« DUP1 == «SUELTA "Uno"» « 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 exclusivas. 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 código siguiente 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" == ENTONCES "Alpha" FIN DUP "B" == ENTONCES "Beta" FIN DUP "G" == ENTONCES "Gamma" FIN "Carta desconocida" FIN SWAP DROP @ Deshazte de la letra original »

Este código es idéntico al siguiente bloque IF/THEN/ELSE/END anidado 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 SWAP DROP @ Deshazte de la letra original »

Sentencias de bucle

PARA/SIGUIENTE

RPL proporciona una instrucción FOR/NEXT para realizar un bucle 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:

índice_desde índice_a PARA nombre_de_variable instrucción_de_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 I + @ Agregue "I" 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_de_bucle SIGUIENTE

PARA/PASO y INICIO/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 por un incremento y la palabra clave STEP, la variable de bucle se incrementará o decrementará en un valor diferente al valor predeterminado de +1. Por ejemplo, el siguiente bucle retrocede de 10 a 2 al decrementar 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_de_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 HASTA condición FINALIZADA

Véase también

Notas

1. ^ "RPL" se deriva de Reverse Polish Lisp según sus desarrolladores originales, [19] [20] [21] [22] [23] [24] mientras que por un corto tiempo en 1987 el departamento de marketing de HP intentó acuñar el acrónimo ROM-based Procedural Language para ello. [2] [24] [25] Además, las iniciales RPL a veces se interpretan incorrectamente como Reverse Polish Logic o Reverse Polish Language . [26]

Referencias

  1. ^ "¿El placer de programar?". Museo de Calculadoras HP. 2020. Archivado desde el original el 2021-12-03.
  2. ^ ab Patton, Charles M. (agosto de 1987). "Computación para calculadoras portátiles" (PDF) . Hewlett-Packard Journal . 38 (8). Palo Alto, California, EE. UU.: Hewlett-Packard Company : 21–25. Archivado desde el original (PDF) el 2011-12-06 . Consultado el 2015-09-12 .
  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 [ enlace muerto permanente ]
  4. ^ http://www.calculatrices-hp.com/index.php?page=emulateurs
  5. ^ "Emulador de HP 50g con ROM #2.16".
  6. ^ http://www.calculatrices-hp.com/uploads/emulateurs/HP50gVirtualCalculatorSetup_3_1_30.zip
  7. ^ abc Hewlett-Packard . "RPLMan de Goodies Disk 4" (RPLMAN.ZIP) . Consultado el 12 de septiembre de 2015 .
  8. ^ Horn, Joseph K. "¿Qué es RPL?". Archivado desde el original el 17 de septiembre de 2017. Consultado el 17 de septiembre de 2017 .
  9. ^ Wessman, Timothy "Tim" James (2016-06-21) [2016-06-20]. "¿Qué hacer con el desbordamiento de pila OBJ->/LIST->?". MoHPC - El museo de las calculadoras HP . Archivado desde el original el 2023-09-24 . Consultado el 2023-09-24 .
  10. ^ Wickes, William C. (enero-febrero de 1987). "La HP-28C: la perspectiva de un experto". HPX Exchange . 1 (1).[1]
  11. ^ Kuperus, Klaas (4 de marzo de 2015). "HP 50g: el fin de una era". Moravia. Archivado desde el original el 2 de abril de 2015.
  12. ^ Kuperus, Klaas (6 de marzo de 2015). "¿HP 50g no es una buena noticia?". Moravia . Consultado el 1 de enero de 2016 .
  13. ^ Wessman, Timothy "Tim" James (26 de diciembre de 2015). "Windows 10 no permite instalar los controladores USB de HP 50g". MoHPC - El museo de las calculadoras HP . Consultado el 1 de enero de 2016 .
  14. ^ Lapilli, Claudio Daniel (3 de enero de 2014). "nuevoRPL" . Consultado el 12 de septiembre de 2015 .[2] (un derivado RPL de código abierto para HP 50g y HP 49g+ , HP 40gs , HP 39gs y hp 39g+, así como HP Prime )
  15. ^ Lapilli, Claudio Daniel (23 de julio de 2021) [2014]. «Proyecto de documentación newRPL». newRPL . Archivado desde el original el 2023-11-03 . Consultado el 23 de octubre de 2023 .
  16. ^ de Dinechin, Christophe (2022). "DB48X en DM42 - Tiempo de ejecución RPL para la calculadora DM42, en el espíritu de HP48/49/50". DB48X . Archivado desde el original el 2023-11-03 . Consultado el 2023-10-23 .
  17. ^ de Dinechin, Christophe (3 de febrero de 2023). "Reviviendo el polaco inverso Lisp: creación de una calculadora de código abierto similar a la HP48". FOSDEM . Archivado desde el original el 3 de octubre de 2023 . Consultado el 3 de octubre de 2023 .(NB. Un derivado mejorado de RPL llamado DB48X para SwissMicros DM42 y DM32 ).
  18. ^ Lapilli, Claudio Daniel (31 de octubre de 2014). "N-Queens en 50g (lenguaje RPL)". MoHPC - El Museo de las Calculadoras HP . Archivado desde el original el 3 de noviembre de 2023. Consultado el 23 de octubre de 2023 .
  19. ^ 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-9. OCLC  839704944. Se consideraron varios sistemas operativos y lenguajes existentes, pero ninguno podía cumplir con todos los objetivos de diseño. Por lo tanto, se desarrolló un nuevo sistema, que fusiona la interpretación de subprocesos de Forth con el 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.(NB: Este título se cita a menudo como "RPL: un lenguaje de control matemático". Hay un extracto disponible en: [3][4])
  20. ^ Wickes, William C. (1991-03-11). "RPL significa Reverse Polish Lisp". www.hpcalc.org . Consultado el 2015-09-12 . 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 se le ocurrió "RPL", tanto como un juego de palabras con "RPN", que ha sido el sello amado/odiado de las calculadoras HP desde 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 la HP 28C hubo un intento de crear un nombre menos extravagante, 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 (las iniciales) RPL. Puedes elegir cualquiera de las dos versiones completas que prefieras. ¿O qué tal "El lenguaje de los ricos"? Bill Wickes, HP Corvallis.
  21. ^ Schoorl, André (4 de abril de 2000) [1997]. "Lista de preguntas frecuentes sobre la HP48". Archivo de calculadoras HP. pág. 69. Consultado el 12 de septiembre de 2015 .
  22. ^ "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. 2000-04-14. 8.1 . Consultado el 2015-09-12 .
  23. ^ Nelson, Richard J. (4 de abril de 2012). "HP RPN Evolves" (PDF) . HP Solve (27). Hewlett-Packard : 30–32 . Consultado el 12 de septiembre de 2015 .
  24. ^ ab 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 cálculo RPN de los 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 procedimental basado en ROM).
  25. ^ "HP celebra 35 años de innovación en calculadoras portátiles". 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 fines 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 ideó un lenguaje llamado RPL (o lenguaje procedimental basado en ROM).
  26. ^ Rechlin, Eric; Marangon, Carlos. "HPedia: La enciclopedia de calculadoras HP". www.hpcalc.org . Consultado el 20 de abril de 2020 .

Lectura adicional

Enlaces externos