Articulo de referencia

RPL (lenguaje de programación)

[[structured programming|structured]]"},"year":{"wt":"1984 (1986)"},"designer":{"wt":"[[Hewlett-Packard]]"},"developer":{"wt":""},"latest_release_version":{"wt":""},"latest_rele...

Calculadora HP 48G, utiliza RPL

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 hay 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 ]

Variantes

La variante interna de nivel bajo a medio de RPL, denominada System RPL (o SysRPL ), se utiliza en algunas calculadoras HP antiguas, así como en las ya mencionadas, 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 sin el uso de herramientas externas, pero en la  serie HP 49/50 existe un compilador integrado en la ROM para utilizar SysRPL. Es posible provocar un fallo grave al programar en SysRPL, por lo que se debe tener precaución al usarlo. 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 específicas de un programa UserRPL como código SysRPL.

Bloques de control

Los bloques de control RPL no son estrictamente posfijos . Si bien existen algunas excepciones notables, las estructuras de los bloques de control se presentan como 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/SI NO/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 comprueba si el número en la parte inferior de la pila es "1" y, en caso afirmativo, lo reemplaza por "Igual a uno":

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

La estructura IF evalúa la condición y luego busca el resultado en la parte inferior de la pila. Como resultado, RPL puede admitir opcionalmente bloques IF al estilo FORTH, lo que permite determinar la condición antes del bloque. Si se deja la condición vacía, la instrucción IF no modificará la pila durante su ejecución y utilizará el resultado existente en la parte inferior de la pila para la comprobación.

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

IFT/IFTE

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

Las instrucciones IFT e IFTE extraen 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 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 extraer un objeto de la parte inferior de la pila y, si es igual a 1, lo reemplaza con "One":

« 1 == "Uno" 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 equivalente en cadena 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

  1. "¿El placer de programar?" . Museo de Calculadoras HP. 2020. Archivado del original el 3 de diciembre de 2021.
  2. 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 .
  3. 1 2 3 Hewlett-Packard . "RPLMan del disco Goodies 4" (RPLMAN.ZIP) . Recuperado el 12-09-2015 .
  4. Horn, Joseph K. "¿Qué es RPL?" . Archivado del original el 17-09-2017 . Recuperado el 17-09-2017 .
  5. 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 .
  6. Wickes, William C. (enero-febrero de 1987). "La HP-28C: una perspectiva interna". HPX Exchange . 1 (1).
  7. Kuperus, Klaas (04-03-2015). "HP 50g: Fin de una era" . Moravia. Archivado del original el 02-04-2015.
  8. Kuperus, Klaas (6 de marzo de 2015). "¿HP 50g no es una buena noticia?" . Moravia . Consultado el 1 de enero de 2016 .
  9. 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 .
  10. 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 )
  11. 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 .
  12. 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 .
  13. 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 ).
  14. 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 .
  15. 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 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. (Nota: Este título se cita a menudo como "RPL: Un lenguaje de control matemático". Un extracto está disponible en:)
  16. 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.
  17. 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 . 
  18. "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 .
  19. Nelson, Richard J. (2012-04-04). "HP RPN Evoluciona" (PDF) . HP Solve (27). Hewlett-Packard : 30–32 . Recuperado el 12 de septiembre de 2015 .
  20. ^ 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).
  21. "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).
  22. Rechlin, Eric; Marangon, Carlos. "HPedia: La enciclopedia de calculadoras HP" . www.hpcalc.org . Consultado el 20 de abril de 2020 .
  23. 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
  24. http://www.calculatrices-hp.com/index.php?page=emulateurs
  25. "Emulador de HP 50g con ROM #2.16" .
  26. http://www.calculatrices-hp.com/uploads/emulateurs/HP50gVirtualCalculatorSetup_3_1_30.zip
Error de cita: No se utiliza en el contenido una referencia definida en la lista llamada "HP_4" (consulte la página de ayuda ). Error de cita: No se utiliza en el contenido una referencia definida en la lista llamada "HP_7" (consulte la página de ayuda ). Error de cita: No se utiliza en el contenido una referencia definida en la lista llamada "HP_5" (consulte la página de ayuda ). Error de cita: No se utiliza en el contenido una referencia definida en la lista llamada "HP_6" (consulte la página de ayuda ).

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 .
  • 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))