Вы находитесь на странице: 1из 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

MINITUTORIAL DE COMANDOS PARA EL MANEJO DE LOS PROCEDIMIENTOS


Luis Carlos Beas Bernuy Dedicado a todos los que usan el pretexto de aprender mas sobre sus calculadoras para dejar de hacer sus obligaciones, y que vivan los vicios permitidos!!! Primer tutorial : Lima verano del 2010. Segundo tutorial : Lima otoo del 2010.

a) b) c) d) e) f) g)

DOLIST.............................1 DOSUBS.............................7 STREAM.............................10 REVLIST............................12 SORT...............................12 SEQ................................13 MAP................................14

Introduccin Para ver bien todos los caracteres debes usar la fuente _CAS_HP48x49x-50x_01, cualquier duda o correccin que me quieras hacer la puedes hacer en mi blog.

Pg. 1 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

PROCEDIMIENTOS Las listas son uno de los objetos mas verstiles con los que contamos, existen muchas herramientas para su manejo y tambin para el manejo de sus elementos (que tambin pueden ser listas), este manejo y versatilidad de las listas (junto con el uso de la pila) es uno de los puntos fuertes del lenguaje de programacin UserRpl, tu puedes hacer programas mas pequeos, rpidos y elegantes si conoces bien los comandos que operan sobre los elementos de una lista y as evitar el uso de estructuras como FOR y otras, estos comandos que procesan los elementos de una lista se encuentran en el men PROCEDURE, que se encuentra en el men LIST que a su ves esta incluido en el men PRG, los comandos mas interesantes son DOLIST, DOSUBS y STREAM de los cuales nos encargaremos esta ves. a) DOLIST.- Se usa para aplicar un comando, funcin o programa a una lista o un grupo de listas. Para su correcto funcionamiento este comando necesita: Las listas sobre las cuales se desea operar, estas deben ser del mismo tamao, por ejemplo:

El nmero de listas antes introducidas n, este es en realidad el nmero de elementos que va utilizar el comando o programa, que para continuar con nuestro ejemplo seria n=3:

Pg. 2 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Y por ultimo el programa comando o funcin yo utilizare un programa que sume tres nmeros, y quedara as:

Y por fin ya se puede usar el comando DOLIST

Lo que el programa hace es tomar 3 elementos, los tres primeros de cada lista como si estuvieran en la pila, en el mismo orden en que se encuentran las listas a las cuales pertenecen aplica el programa y produciendo el primer elemento de la lista final, luego con los segundos elementos de cada lista proceder aplicando tambin a estos elementos el programa y su resultado es el segundo elemento de la lista final y as sucesivamente. El nmero n se puede omitir, es decir tener las listas y despus el comando programa o la funcin cuando el argumento en el primer nivel de la pila es: Un comando, ejemplo:

Pg. 3 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Un programa que contenga un solo comando, como puede ser:

Tambin los elementos pueden ser listas:

O un programa que tenga la estructura de una funcin de Usuario.

Pg. 4 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

En estos casos donde se omite n DOLIST puede devolver el error Invalid User Function en el caso de que el programa sea vaci o este programa no tenga la estructura de una funcin excepto claro en el caso de que el programa contenga un solo comando. Tambin DOLIST produce Wrong Argument Count si el objeto en el primer nivel de la pila es un comando que acepta de 1 a 5 argumentos de tipos no especificados como DUP, ROT, LIST por ejemplo.

El comando DOLIST puedo o no devolver objetos a lista final como por ejemplo en:

Cuyo resultado ser:

Nota: el ltimo argumento puede ser el nombre de una variable global o local, que contenga un comando, programa o funcin. Pero lo que muchos se preguntaran es que hace internamente DOLIST, bien lo que hace es tomar los elementos de las lista que le correspondan a la iteracin despus los pone en la pila y ejecuta el programa y as sucesivamente por ultimo pondr todos los objetos producidos en una lista si estos son 2 o mas si no solo devolver un objeto, por ejemplo veamos:

Pg. 5 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Aqu hay que notar dos cosas, la primera que hay un objeto en el nivel 5, que es el nmero 5, segundo que el programa usa tres objetos y nosotros solo pusimos 2 listas e indicamos su cantidad en el segundo nivel de la pila, bien al aplicar DOLIST ocurre que primero se llevan los primeros nmeros de cada lista a la pila donde ya esta el 5 ocurrir que en la pila se tendrn tres nmeros y con estos si se puede aplicar el programa que har: 5 2 5 * + y esto es 5+2*5=15 y pondr este valor en la pila luego pondr en la segunda iteracin el 3 y el 6 donde ha quedado el 15 de la primera iteracin y as tenemos otra vez 3 objetos para el programa que son 15 3 6 a los cuales se les hace * + que es lo mismo que 15+3*6=33, que por ser un solo elemento no ser devuelto como una lista sino solo el objeto, al aplicar el comando DOLIST puedes comprobar que efectivamente el resultado es 33:

Otro ejemplo:

Aqu cada iteracin produce 2 valores y todo el proceso 4 con lo que se producir una lista con 4 valores:

Pg. 6 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Espero que haya quedado claro. b) DOSUBS.- Se usa para aplicar secuencialmente un procedimiento a los elementos de una lista. Este comando usa: Una lista, que puede ser:

El ndice de trama n, que es el nmero de elementos que toma el comando, programa o funcin de la lista para cada una de sus iteraciones por ejemplo podra ser n=3, as para la primera ves tomara 1, 2 y 3; para la segunda vez 2, 3 y 4 y as sucesivamente.

Y finalmente el comando programa o funcin:

Pg. 7 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Y aplicando el comando DOSUBS resultara:

Igual que para el comando DOLIST nmero n se puede omitir cuando el argumento en el primer nivel de la pila es: Un comando. Un programa que contenga un solo comando. Un programa con la estructura de una funcin. Un nombre de variable local o global que contenga una de las anteriores. Durante la ejecucin del comando DOSUBS la posicin del primer elemento del grupo que se este usando se puede obtener usando el comando NSUB y el nmero de grupo que se esta usando con el comando ENDSUB, estos dos ltimos comandos retornan Undefined Local Name si DOSUBS no esta activado, vemos un ejemplo:

Pg. 8 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Al ejecutar el comando DOSUBS, para cada caso aplicar la siguiente frmula:

resultado = elemento posicion

Con lo cual se obtiene:

El comando DOSUBS en los casos donde se omita el ndice de trama, puede devolver el error Invalid User Function el caso de que el programa sea vaci o este programa no tenga la estructura de una funcin excepto claro en el caso de que el programa contenga un solo comando. Tambin puede devolver Wrong Argument Count si el objeto en el primer nivel de la pila es un comando que acepta de 1 a 5 argumentos de tipos no especificados como DUP, ROT, DUP2 por ejemplo. El comando DOSUBS funciona internamente de la misma manera que DOLIST.

Pg. 9 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

c) STREAM.- Se usa para ejecutar un comando, programa o funcin sobre todos los elementos de una lista, se usa generalmente con comandos o programas que tomen dos valores y devuelvan uno. Usa una lista y un comando o un programa, como ejemplo:

Tomara 1 y 2, los mover a la pila, los sumara obtendr 3 y despus usara este resulta junto con el siguiente elemento que es 3 y har lo mismo que hizo con 1 y 2, hasta completar todos los elementos, en otras palabras obtendr la suma de todos los elementos. Con una lista que contenga los elementos ordenados de menor a mayor (puede usar el comando SORT) se puede obtener el Mnimo comn mltiplo de una lista de nmeros:

Aplicando el comando STREAM se obtendra 48. El comando STREAM funciona internamente de la misma manera que DOLIST pero demos otra vez una explicacin con un ejemplo STREAM mueve los 2 primeros elementos de la lista a la pila ejecuta el comando o programa devuelve su resultado tambin a la pila en el siguiente paso mueve el tercer elemento a la pila (en el caso de existir este) y ejecuta nueva mente el comando o programa obviamente junto con lo que haya en la pila veamos un ejemplo anmalo por as decirlo:

Pg. 10 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Noten la presencia del cero en el nivel 3, analicemos ahora el programa, este necesita tres nmeros multiplicara los dos primeros y a este producto le sumara el tercero y por ultimo har una duplica de este ultimo resultado, es decir que devuelve dos valores no olvidar que el programa toma 3 nmeros y devuelve 2, bien STREAM en su primera ejecucin mover los dos primeros elementos a la pila el 1 y el 2, como ya se haba dicho, este movimiento har que el cero pase al tercer nivel y tendremos a dems 1 en el segundo nivel y 2 en el primer nivel estos son los tres valores que necesita el programa 0 1 2 y les aplicara * + DUP, es decir 0 1 2 * + DUP = 2 DUP = 2 2, despus de esta primera ejecucin tendremos 2 en el segundo nivel y 2 en el primer nivel tambin; para la segunda ejecucin del comando STREAM se mueve el siguiente elemento de la lista a la pila es decir el 3 as tendremos: 3: 2: 1: 2 2 3

Que son los nuevos tres valores para que pueda ejecutarse correctamente el programa y continuar devolviendo dos valores y con el siguiente elemento completar los tres que se recitan y as sucesivamente hasta que al final devolver dos objetos del mismo valor, como se puede probar al aplicar el comando STREAM a los datos de este ejemplo:

Pg. 11 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

d) REVLIST.- Debe a ver una lista en el primer nivel de la pila, y este comando invierte el orden de los elementos en la lista, no hay mucho que comentar vemos un ejemplo:

e) SORT.- Se aplica a una lista en el primer nivel de la pila y a dems todos los elementos de la lista deben ser del mismo tipo opera sobre los elementos de la lista, lo que hace es ordenar los elementos de la lista, si son nmeros reales, enteros, enteros binarios o objetos con unidades estos sern ordenados de menor a mayor, por ejemplo:

Lo mismo suceder con los enteros y los enteros binarios. La lista puede contener nombres globales, nombres locales o cadenas de caracteres (strings) y en estos casos los ordenara en orden alfabtico, como en:

Tambin podemos tener en el primer nivel una lista de listas y en este caso sern ordenadas por el primer elemento en cada lista:

Pg. 12 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Como se puede ver claramente lo que importa aqu es solo el primer elemento de cada lista. f) SEQ.- SEQ usa los siguientes argumentos: 5: 4: 3: 2: 1: expresin en funcin del ndice ndice valor de arranque valor de parada salto

La expresin en funcin del ndice puede ser un programa o una expresin algebraica, el ndice generalmente ser un nombre global, el valor de arranque el de parada y el salto deben ser objetos del mismo tipo, do los tipos que acepte el bucle FOR STEP para su arranque y parada. Veamos un ejemplo:

Otro:

g) MAP.- Este comando se encuentra en el catalogo de funciones, y se usa para aplicar un programa a cada elemento de una lista. Si el programa que se aplica devuelve un solo valor u objeto este valor u objeto ser parte de la lista final como en:

Pg. 13 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

Y despus de ejecutar MAP:

Pero si en cambio el programa devuelve 2 o mas objetos estos sern incluidos en una lista y esta lista ser el primer elemento de la lista final, como en:

Y el resultado es:

Pg. 14 de 15

Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP -

Luis Carlos Beas Bernuy

El comando MAP es diferente de los anteriores vistos este ejecuta su programa sobre el elemento que le corresponda. Ejemplos: 1. El promedio Ponderado: Entrada: 2: { valores } 1: { pesos } Salida 1: promedio ponderado SWAP OVER * LIST SWAP LIST / NUM Con valores:

Pg. 15 de 15

Вам также может понравиться