Você está na página 1de 17

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
Segundo tutorial

: Lima verano del 2010.

: Lima otoo del 2010.

a) DOLIST.............................1
b) DOSUBS.............................7
c) STREAM.............................10
d) REVLIST............................12
e) SORT...............................12
f) SEQ................................13
g) 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 17

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

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.

Pg. 2 de 17

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

Luis Carlos Beas Bernuy

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:

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

Pg. 3 de 17

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

Luis Carlos Beas Bernuy

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:

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

Pg. 4 de 17

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

Luis Carlos Beas Bernuy

Tambin los elementos pueden ser listas:

O un programa que tenga la estructura de una funcin de


Usuario.

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.

Pg. 5 de 17

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

Luis Carlos Beas Bernuy

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. 6 de 17

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:

Pg. 7 de 17

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

Luis Carlos Beas Bernuy

Aqu cada iteracin produce 2 valores y todo el proceso 4 con lo


que se producir una lista con 4 valores:

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

Pg. 8 de 17

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

Luis Carlos Beas Bernuy

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:

Y aplicando el comando DOSUBS resultara:

Pg. 9 de 17

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

Luis Carlos Beas Bernuy

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:

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


frmula:

resultado elemento posicion

Con lo cual se obtiene:

Pg. 10 de 17

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

Luis Carlos Beas Bernuy

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.

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

Pg. 11 de 17

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

Luis Carlos Beas Bernuy

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:

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

Pg. 12 de 17

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

Luis Carlos Beas Bernuy

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:
Que

3
son

los

nuevos

tres

valores

correctamente el programa y continuar

para

que

pueda

ejecutarse

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:

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:

Pg. 13 de 17

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

Luis Carlos Beas Bernuy

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. 14 de 17

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:

expresin en funcin del ndice

4:

ndice

3:

valor de arranque

2:

valor de parada

1:

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:

Pg. 15 de 17

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

Luis Carlos Beas Bernuy

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:

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:

Pg. 16 de 17

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

Luis Carlos Beas Bernuy

Y el resultado es:

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. 17 de 17

Você também pode gostar