8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
1/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 1 de 17
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 otoño del 2010.
a) DOLIST.............................1
b) DOSUBS.............................7
c) STREAM.............................10
d) REVLIST............................12
e) SORT...............................12
f) SEQ................................13
g)
MAP................................14
Introducción
Para ver bien todos los caracteres debes usar la fuente _CAS_HP48x-
49x-50x_01, cualquier duda o corrección que me quieras hacer la puedes
hacer en mi blog.
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
2/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 2 de 17
PRO EDIMIENTOS
Las listas son uno de los objetos mas versátiles con los que contamos,
existen muchas herramientas para su manejo y también para el manejo de
sus elementos (que también 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 programación UserRpl, tu puedes hacer programas mas
pequeños, rápidos 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, función o programa a unalista o un grupo de listas.
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
3/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 3 de 17
Para su correcto funcionamiento este comando necesita:
Las listas sobre las cuales se desea operar, estas deben ser del
mismo tamaño, por ejemplo:
El número de listas antes introducidas “n ”, este es en realidad el
número 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 función yo utilizare un
programa que sume tres números, y quedaría así:
Y por fin ya se puede usar el comando DOLIST
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
4/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 4 de 17
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
también a estos elementos el programa y su resultado es el
segundo elemento de la lista final y así sucesivamente.
El número n se puede omitir, es decir tener las listas y después el
comando programa o la función cuando el argumento en el primer
nivel de la pila es:
Un comando, ejemplo:
Un programa que contenga un solo comando, como puede ser:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
5/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 5 de 17
También los elementos pueden ser listas:
O un programa que tenga la estructura de una función 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 función excepto
claro en el caso de que el programa contenga un solo comando.
También 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,→
LISTpor ejemplo.
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
6/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 6 de 17
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 función.
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 iteración después 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:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
7/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 7 de 17
Aquí hay que notar dos cosas, la primera que hay un objeto en el
nivel 5, que es el número 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 números de cada lista a la pila donde
ya esta el 5 ocurrirá que en la pila se tendrán tres números 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 iteración el 3 y el 6 donde ha quedado el 15 de la primera
iteración 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 comouna lista sino solo el objeto, al aplicar el comando DOLIST puedes
comprobar que efectivamente el resultado es 33:
Otro ejemplo:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
8/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 8 de 17
Aquí cada iteración 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 número de elementos que tomael comando, programa o función de la lista para cada una de sus
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
9/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 9 de 17
iteraciones por ejemplo podría 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 función:
Y aplicando el comando DOSUBS resultaría:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
10/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 10 de 17
Igual que para el comando DOLIST número “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 función.
Un nombre de variable local o global que contenga una de las
anteriores.
Durante la ejecución del comando DOSUBS la posición del primer
elemento del grupo que se este usando se puede obtener usando el
comando NSUB y el número de grupo que se esta usando con el
comando ENDSUB, estos dos últimos comandos retornan UndefinedLocal Name si DOSUBS no esta activado, vemos un ejemplo:
Al ejecutar el comando DOSUBS, para cada caso aplicará la siguiente
fórmula:
posicionresultado elemento
Con lo cual se obtiene:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
11/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 11 de 17
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 función excepto claro en el caso de que el programa contenga
un solo comando.
También 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 función 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 despuésusara este resulta junto con el siguiente elemento que es 3 y hará lo
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
12/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 12 de 17
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 Mínimo común
múltiplo de una lista de números:
Aplicando el comando STREAM se obtendría 48.
El comando STREAM funciona internamente de la misma manera que
DOLIST pero demos otra vez una explicación con un ejemplo STREAM
mueve los 2 primeros elementos de la lista a la pila ejecuta elcomando o programa devuelve su resultado también 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 anómalo por así decirlo:
Noten la presencia del cero en el nivel 3, analicemos ahora el
programa, este necesita tres números 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 queel programa toma 3 números y devuelve 2, bien STREAM en su
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
13/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 13 de 17
primera ejecución moverá los dos primeros elementos a la pila el 1 y el
2, como ya se había dicho, este movimiento hará que el cero pase al
tercer nivel y tendremos a demás 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,
después de esta primera ejecución tendremos 2 en el segundo nivel y 2
en el primer nivel también; para la segunda ejecución del comando
STREAM se mueve el siguiente elemento de la lista a la pila es decir
el 3 así tendremos:
3: 2
2: 21: 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:
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:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
14/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 14 de 17
→
e) SORT.- Se aplica a una lista en el primer nivel de la pila y a demás
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 números reales, enteros, enteros binarios o objetos con
unidades estos serán 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 alfabético,
como en:
→
→
También podemos tener en el primer nivel una lista de listas y en este
caso serán ordenadas por el primer elemento en cada lista:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
15/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 15 de 17
→
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: expresión en función del índice
4: índice3: valor de arranque
2: valor de parada
1: salto
La expresión en función del índice puede ser un programa o una
expresión 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:
→
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
16/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pág. 16 de 17
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 después de ejecutar MAP:
Pero si en cambio el programa devuelve 2 o mas objetos estos serán
incluidos en una lista y esta lista será el primer elemento de la lista
final, como en:
8/18/2019 Minitutorial Comandos Dolist Dosubs Stream Revlist Sort Seq Map
17/17
Minitutorial de Comandos: DOLIST, DOSUBS, STREAM, REVLIST, SORT, SEQ, MAP - Luis Carlos Beas Bernuy
Pá 17 d 17
Y el resultado es:
El comando MAP es diferente de los anteriores vistos este ejecuta suprograma sobre el elemento que le corresponda.
Ejemplos:
1.
El promedio Ponderado:
Entrada:
2: { valores }
1: { pesos }
Salida1: promedio ponderado
«
SWAP OVER * …LIST SWAP …LIST / •NUM
»
Con valores:
→