» PARA
PARA nombreproc :entrada1 :entrada2 ...
Esta primitiva le dice a Logo que acepte una definición de procedimiento. El procedimiento se llamará nombreproc y no debe existir otro procedimiento con el mismo nombre. Las entradas o argumentos se llamarán entrada1, entrada2, etc. Un procedimiento puede tener varias entradas o ninguna. Los nombres de procedimientos y de entradas se pueden escribir indistintamente en mayúsculas o minúsculas.
nombreproc:(PALABRA) Nombre del procedimiento que se va a definir (no debe estar precedido por comillas).
entrada1:(PALABRA) Primer argumento del procedimiento que se va a definir (precedido por dos puntos ":").
entrada2:(PALABRA) Segundo argumento del procedimiento que se va a definir (precedido por dos puntos ":").
Diferente de las otras primitivas, PARA toma como entradas las palabras que se teclean en una línea de instrucciones, como si todas estuvieran entrecomilladas. (Por ello es "una forma especial".)
Esta versión de Logo admite un número variable de entradas en los procedimientos. Todos los procedimientos tienen un número MÍNIMO, por DEFECTO, y MÁXIMO de entradas.
El número MÍNIMO de entradas es el número de entradas requeridas. Una entrada se indica con:
:nombreentrada
Notación.
Además de las entradas requeridas puede haber cero o más entradas opcionales, que se representan con la siguiente notación:
[:inputname valor.expresion]
Cuando se invoca el procedimiento, si no se proporcionan entradas reales para las entradas optativas, se pone como valor de las correspondientes entradas "valor.expresion". Estas entradas se procesan de izquierda a derecha, así valor.expresion se puede basar en la última entrada. Ejemplo:
para proc :inlista [:startvalor primero :inlista]
Si se invoca el procedimiento como:
proc [a b c]
Entonces la variable INLISTA tendrá el valor [A B C] y la variable STARTVALOR tendrá el valor A. Si se invoca el procedimiento como:
(proc [a b c] "x)
Entonces INLISTA tendrá el valor [A B C] y STARTVALOR el valor X.
Después de todas las entradas requeridas y de las optativas, puede venir una entrada "restante", con la siguiente notación:
[:inputname]
Sólo puede haber una entrada de este tipo. Cuando se invoca el procedimiento, el valor de esta entrada será una lista que contiene todas las entradas reales con tal que no se incluya un nombre de una de las entradas requeridas u optativas. Ejemplo:
para proc :in1 [:in2 "foo] [:in3]
Si este procedimiento se invoca como:
proc "x
Entonces IN1 tiene el valor X, IN2 tiene el valor FOO, e IN3 tiene el valor [] (lista vacía). Si se invoca como:
(proc "a "b "c "d)
Entonces IN1 tiene el valor A, IN2 tiene el valor B, e IN3 tiene el valor [C D].
El número MÁXIMO de entradas para un procedimiento es infinito si tiene una entrada "restante"; de lo contrario, sería el número de entradas requiridas más el número de entradas optativas.
El número de entradas por DEFECTO para un procedimiento, que es el número de entradas que aceptará si no se invoca entre paréntesis, es generalmente igual a MÍNIMO. Si se quiere un número diferente por DEFECTO debe indicarse poniéndolo después del último objeto de la línea PARA. Ejemplo:
para proc :in1 [:in2 "foo] [:in3] 3
Este procedimiento tiene un MÍNIMO de una entrada, tres entradas por DEFECTO, y un MÁXIMO infinito.
Logo responde a la primitiva PARA entrando en el modo de definición de procedimientos. El carácter prompt cambia de ? a > y cualquier instrucción que teclee forma parte de la definición hasta que teclee en una sola línea la palabra .
Ejemplo:
para eco :times :objeto
repite :times [escribe :objeto]
fin
eco 2 "Hola
Hola
Hola
eco 3 "Adiós
Adiós
Adiós
Adiós
» DEFINE
DEFINE nombreproc texto
Define un procedimiento de nombre nombreproc y texto texto. Si existe un procedimiento con el mismo nombre, la nueva definición sustituye a la antigua. El texto de la entrada debe ser una lista cuyos miembros serán sublistas. La primera sublista contiene las entradas y se parece a la línea , pero sin la palabra PARA y sin el nombre del procedimiento, y sin los dos puntos delante de los nombres de las entradas. En otras palabras, los miembros de la primera sublista son palabras que indican los nombres de las entradas requeridas y listas con los nombres de las entradas opcionales o restantes. Las demás sublistas de la entrada texto forman el cuerpo del procedimiento, con una sublista por cada línea de instrucciones. (No hay una línea en la entrada texto.) No se puede redefinir una primitiva, a no ser que la variable tenga el valor CIERTO.
nombreproc:(PALABRA) Nombre del procedimiento que se va a definir.
texto:(LISTA) Definición del procedimiento como una lista.
Ejemplo:
define "abc [[a b] [escribe :a] [escribe :b]]
abc "Hola "Adiós
Hola
Adiós
» TEXTO
texto TEXTO nombreproc
Devuelve el texto de un procedimiento llamado nombreproc en la forma que se requiere para un : una lista con sublistas, la primera describe las entradas del procedimiento y las demás las líneas del cuerpo. TEXTO no refleja el formato en que se editó el procedimiento, como líneas y espacios extras.
texto:(LISTA) Definición del procedimiento como una lista.
nombreproc:(PALABRA) Nombre del procedimiento.
Ejemplo:
define "abc [[a b] [escribe :a] [escribe :b]]
abc "Hola "Adiós
Hola
Adiós
muestra texto "abc
[[a b] |[escribe :a] [escribe :b]]
» COPIADEF
COPIADEF nuevonom viejonom
Crea un procedimiento de nombre "nuevonom", idéntico a otro llamado "viejonom". El más reciente puede ser una primitiva. Si "nuevonom" estaba definido, se pierde la definición anterior. Si "nuevonom" es una primitiva, no se permite su redefinición a no ser que la variable tenga el valor CIERTO. Las definiciones creadas con COPIADEF no se guardan con ; las primitivas no se guardan nunca, y los procedimientos creados con COPIADEF se ocultan. ( cuando ejecuta o aparece el nombre antiguo porque se oculta el nuevo.)
Nota: dialectos de Logo se diferencian en el orden de las entradas. Estos dialectos usan "el orden ", y no "el orden ."
nuevonom:(PALABRA) Nombre del nuevo procedimiento.
viejonom:(PALABRA) Nombre del antiguo procedimiento.
Ejemplo:
para bienvenida
escribe "Hola
fin
bienvenida
Hola
copiadef "decirHola "bienvenida
decirHola
Hola