Mario de Lama
malar@arrakis.es
http://www.arrakis.es/~malar
Cuando se ejecutan los programas tenemos diversas alternativas para guardar y manipular los argumentos que precisan los comandos:
En 1: debemos tener al iniciar el programa un objeto que no de error al aplicarle el comando LN
\<<
'X' @ Colocamos el nombre de la variable global en 1:
STO @ Almacenamos el contenido de 2: en la variable X
2 @ Colocamos un 2 en la pila
DUP @ Lo duplicamos
^ @ Elevamos 2: a la potencia indicada en 1:
X @ Recuperamos la variable X en 1:
LN @ Hallamos su logaritmo
* @ Multiplicamos 2: por 1:
'X' @ Colocamos el nombre de la variable en la pila
PURGE @ Borramos la variable
\>>
Vemos que para recuperar el contenido de una variable sólo tenemos que poner en la pila su nombre sin delimitadores. Otra versión de este programa sería:
\<<
'X' @ Colocamos el nombre de la variable global en 1:
STO @ Almacenamos el contenido de 2: en la variable X
2 @ Colocamos un 2 en la pila
SQ @ Lo elevamos al cuadrado
X @ Recuperamos la variable X en 1:
LN @ Hallamos su logaritmo
* @ Multiplicamos 2: por 1:
'X' @ Colocamos el nombre de la variable en la pila
PURGE @ Borramos la variable
\>>
\<<
\-> @ Inicio de la creación de variables locales
X @ Nombre de la variable local
\<< @ Almacenamos el contenido de 2: en la variable X
2 @ Colocamos un 2 en la pila
SQ @ Lo elevamos al cuadrado
X @ Recuperamos la variable X en 1:
LN @ Hallamos su logaritmo
* @ Multiplicamos 2: por 1:
\>> @ Desaparece la variable X
\>>
Otra versión sería:
\<<
\-> @ Inicio de la creación de variables locales
X @ Nombre de la variable local
'LN(X)*SQ(2)' @ Ejecutamos la expresión algebraica
\>>
Vemos que a continuación del comando \-> puede haber un programa o un algebraico, cuando este termina las variables desaparecen y no se pueden utilizar en el resto del programa (si lo hay).
\<<
\-> @ Inicio de la creación de variables locales
X @ Nombre de la variable local
'LN(X)*SQ(2)' @ Ejecutamos la expresión algebraica
\>>
Ponemos 'LOGA' en 1: y presionamos STO. Esta va a ser nuestra subrutina llamada por el siguiente programa:
\<<
\-> @ Inicio de la creación de variables locales
X @ Nombre de la variable local
\<< @ Almacenamos el contenido de 2: en la variable X
X @ Recuperamos la variable
SIN @ Hallamos el seno de X
X @ Volvemos a recuperar la variable
LOGA @ Llamamos a la subrutina
\>> @ Desaparece la variable X
- @ Restamos al seno el resultado de LOGA
\>>
Una vez que el programa llega a LOGA, como es una variable, ejecuta lo que contiene. Es lo mismo que cuando recupera el valor de X. Si sólo deseamos poner en la pila el contenido de una variable debemos ejecutar el siguiente procedimiento: Poner su nombre en la pila entre comillas simples ('LOGA' en este caso) y ejecutar RCL. De esta manera obtendríamos en la pila: \<< \-> X 'LN(X)*SQ(2)' \>>, para ejecutarlo deberemos programar a continuación el comando EVAL.
Siguiendo con el programa, vemos que LOGA utiliza la misma variable X que el programa que lo llama ¿Para qué crear una nueva variable entonces? es más fácil usar una variable compilada de la siguiente forma:
Guardamos en LOGA el algebraico siguiente:
'LN(\<-X)*SQ(2)'
Escribimos la subrutina principal:
\<<
\-> @ Inicio de la creación de variables locales
\<-X @ Nombre de la variable local compilada
\<< @ Almacenamos el contenido de 2: en la variable \<-X
\<-X @ Recuperamos la variable
SIN @ Hallamos el seno de \<-X
LOGA @ Llamamos a la subrutina
\->NUM @ Evaluamos el algebraico
\>> @ Desaparece la variable \<-X
- @ Restamos al seno el resultado de LOGA
\>>
Como podemos ver el primer carácter de las variables compiladas ha de ser "\<-". En el primer ejemplo, el programa principal deja en la pila la variable X antes de llamar a la subrutina LOGA. Esto es necesario ya que LOGA necesita que en 1: haya un argumento para guardarlo en su propia variable X . Ambas son distintas a pesar de llevar el mismo nombre (la calculadora las guarda en diferentes posiciones de memoria), sin embargo la variable compilada \<-X es la misma para ambos programas y no es necesario que el principal deje nada en la pila a la subrutina.
Para convencernos de que efectivamente desaparece \<-X podemos probar con el siguiente programa:
\<<
\-> @ Inicio de la creación de variables locales
\<-X @ Nombre de la variable local compilada
\<< @ Almacenamos el contenido de 2: en la variable \<-X
\<-X @ Recuperamos la variable
SIN @ Hallamos el seno de \<-X
LOGA @ Llamamos a la subrutina
\>> @ Desaparece la variable \<-X
\->NUM @ Intentamos evaluar el algebraico
- @ No llega a ejecutarse
\>>
Este programa nos produce un error: "\->NUM Error: Undefined Local Name" ya que la variable \<-X no existe.