Capítulo 6. Introducción a LOGO

Contenido:


En esta sección vamos a presentar los conceptos básicos de LOGO, apoyados en ejemplos, y a dar la relación de las instrucciones disponibles. No pretende ser un libro de texto ni una guía de referencia exhaustiva. Le sugerimos que consulte las diversas publicaciones de Amsoft y de otros editores sobre este tema.

LOGO es un lenguaje de programación que está ganando rápidamente gran popularidad por lo fácil que es de aprender y de usar.

Es el lenguaje ideal para aprender las técnicas de programación, cualquiera que sea su experiencia.

Los programas de LOGO se construyen por bloques a base de procedimientos. El propio Dr. LOGO es una colección de procedimientos, denominados primitivas, que el programador combina para formar sus programas.

Durante la década de los 70, un grupo de informáticos y educadores, dirigidos por Seymour Papert, desarrolló el lenguaje LOGO, con sus gráficos de tortuga, como medio de aprendizaje de la informática destinado a niños muy pequeños.

Incluyeron la tortuga para que los jóvenes estudiantes tuvieran, como dice Papert, "un objeto con el que pensar, una herramienta que les ayudara a aprender de forma innovadora".

La tortuga, un dibujo con forma de punta de flecha, puede ser movida por la pantalla y controlada con órdenes muy sencillas.

Dr. LOGO es una bien meditada implementación de LOGO que ha sido especialmente adaptada al ordenador AMSTRAD para hacerla aun más fácil de programar. Incluye ampliaciones del lenguaje con las que se puede aprovechar la capacidad sonora del CPC6128; la edición de los programas se facilita al poderse utilizar las teclas de movimiento del cursor.

Para cargar Dr. LOGO, inserte en la unidad de disco una copia de la cara 1 del juego de discos del sistema y escriba

|CPM

Cuando aparezca el mensaje A>, extraiga el disco (cara 1) e inserte una copia de la cara 3 (Dr. LOGO y HELP).

Para ejecutar Dr. LOGO escriba

SUBMIT LOGO3

Al cabo de unos segundos aparecerá el mensaje de presentación, seguido del inductor, que en LOGO es el signo de interrogación ?.

Dr. LOGO para CP/M 2.2
Nota. En la cara 4 del juego de discos del sistema hemos incluido otra versión de Dr. LOGO por si usted necesitara utilizar este lenguaje con CP/M 2.2 (que es el disponible en los modelos CPC664 y CPC464+DDI1). En general, no es deseable utilizar la versión de LOGO de la cara 4 en el CPC6128. La versión recomendada, esto es, la de la cara 3, es la versión completa del Dr. LOGO de Digital Research.
Si a pesar de todo quiere cargar la versión de CP/M 2.2, inserte en la unidad una copia de la cara 4 y escriba
|CPM
Cuando aparezca el mensaje A>, escriba
SUBMIT LOGO2
Al cabo de unos segundos aparecerá el mensaje de presentación, seguido del mensaje inductor, ?.

Primeros pasos

El mensaje ? indica que Dr. LOGO está esperando que usted escriba algo en el teclado.

Escriba (en minúsculas) lo siguiente:

fd 60

y verá cómo aparece la tortuga y cómo se mueve hacia delante 60 unidades, dibujando al mismo tiempo. La pantalla se ha borrado y ha reservado una zona amplia para los gráficos y una más pequeña para el texto, con el signo ? cerca del borde inferior de la pantalla.

Dr. LOGO decide en ocasiones redistribuir la pantalla para asignar mayor superficie a los gráficos o al texto, según convenga.

Escriba:

rt 90

y la tortuga girará 90 grados hacia la derecha.

Escriba ahora:

fd 60

y verá cómo la tortuga dibuja otra recta de 60 unidades de longitud perpendicular a la primera.

Experimente con estas sencillas instrucciones, fd (de forward, adelante), bk (de backward, atrás), rt (de right, derecha) y It (de left, izquierda), y observe la pantalla.

Un procedimiento es una lista de instrucciones que explica a Dr. LOGO cómo realizar cierta tarea.

Los procedimientos que usted escriba irán ampliando la lista de los incorporados a Dr. LOGO, que son las denominadas primitivas.

fd, bk, rt y lt son primitivas incorporadas que se pueden incluir en nuevos procedimientos.

Otra primitiva útil es cs, que borra la pantalla y envía la tortuga a su situación (posición y orientación) inicial.

Un procedimiento sencillo

Fácilmente se comprende que si repetimos cuatro veces las instrucciones

fd 60 rt 90

obtendremos un cuadrado de 60 unidades de lado.

El mismo efecto se consigue escribiendo

repeat 4 [fd 60 rt 90]

(repeat=repetir). Borre la pantalla, teclee esta instrucción y observe qué ocurre.

Podemos asignar esa fórmula a un nuevo procedimiento, que denominaremos cuadrado. Escriba lo siguiente:

to cuadrado
repeat 4 [fd 60 rt 90]
end

A partir de ahora, Dr. LOGO entenderá cuadrado como si fuera una primitiva; cada vez que encuentre esa palabra, dibujará un cuadrado. Al procedimiento le podríamos haber dado cualquier otro nombre, pero éste nos recuerda cuál es la tarea que el procedimiento realiza.

Dr. LOGO permite que se teclee una serie de instrucciones seguidas, en una misma lí nea. Así,

cuadrado rt 45 cuadrado

dibuja dos cuadrados intercalando un giro de 45 grados entre ellos.

Procedimientos con parámetros

Un procedimiento como el que acabamos de definir no nos serviría de mucho si no pudiéramos decirle de qué tamaño queremos que sea el cuadrado. Para ello podemos definir nuestro procedimiento de la siguiente manera:

to cualquiercuadrado :lado
repeat 4 [fd :lado rt 90]
end 

con lo que hemos introducido la idea de variable, llamada, en este caso, :lado.

Observe que el nombre va precedido del signo de dos puntos, lo que indica a Dr. LOGO que :lado es una variable, no una orden.

Cuando utilicemos este procedimiento, tendremos que suministrarle un valor de entrada. Por ejemplo, cualquiercuadrado 150 dibujará un cuadrado de 150 unidades de lado.

Enlacemos ahora dos procedimientos:

cs cualquiercuadrado 100 rt 45 cualquiercuadrado 150

La tortuga ha dibujado los dos cuadrados, girando el segundo 45 grados con respecto al primero.

Observe que Dr. LOGO escribe el signo de admiración ! para indicar que una línea es continuación de la anterior.

Utilización de variables para recordar valores

Dr. LOGO utiliza las variables, no sólo para recordar valores, sino también para suministrar valores de entrada a los procedimientos.

Empecemos por definir un nuevo procedimiento:

to triangulo
repeat 3 [fd :lado rt 120]
end

Para probarlo podemos escribir:

make "lado 100
triangulo

(make=hacer).

Si queremos averiguar qué valor tiene asignado actualmente la variable :lado, basta con que tecleemos :lado a la derecha de ? y Dr. LOGO escribirá su valor.

También podemos utilizar la variable :lado en un procedimiento distinto. Observe en el siguiente procedimiento cómo vamos incrementando el valor de :lado a cada paso para que el dibujo vaya siendo cada vez mayor:

to dibujo
triangulo lt 60 triangulo rt 60
make "lado :lado+4
dibujo
end
make "lado 10
cs dibujo

Pulse [ESC] cuando quiera detener el programa.

Edición de programas y procedimientos

Dr. LOGO permite corregir los errores de mecanografía y modificar los procedimientos definidos previamente. Las teclas de edición son los siguientes:

  • Las teclas del cursor, [↑] [↓] [←] [→], que mueven el cursor carácter o línea a línea.

  • Las teclas del cursor, [↑] [↓] [←] [→], combinadas con [CONTROL], llevan el cursor al principio o al final de la página, o a la izquierda o a la derecha de la línea.

  • [CLR] borra el carácter que está en la posición del cursor; [←BORR] borra el carácter que está a la izquierda del cursor.

  • [RETURN] indica a Dr. LOGO que se ha terminado de editar una línea de órdenes; cuando se está editando un procedimiento, intercala una línea en blanco.

  • [ESC] abandona la edición.

  • [COPIA] indica a Dr. LOGO que ha terminado la edición del procedimiento.

Cuando esté introduciendo órdenes o procedimientos nuevos, corrija el texto de la línea actual con las teclas descritas. Todos los caracteres que teclee, a excepción de los mencionados, serán insertados en la posición del cursor.

Para editar un procedimiento definido previamente, utilice la orden ed. Dr. LOGO escribe la versión antigua del procedimiento y permite que se utilicen los recursos descritos para mover el cursor por la pantalla y modificar lo que se desee. Modifique el procedimiento dibujo tecleando

Cuando esté introduciendo órdenes o procedimientos nuevos, corrija el texto de la línea actual con las teclas descritas. Todos los caracteres que teclee, a excepción de los mencionados, serán insertados en la posición del cursor. Para editar un procedimiento definido previamente, utilice la orden ed. Dr. LOGO escribe la versión antigua del procedimiento y permite que se utilicen los recursos descritos para mover el cursor por la pantalla y modificar lo que se desee.

Modifique el procedimiento dibujo tecleando

ed "dibujo

Practique con las diferentes teclas de edición. Cuando haya terminado, pulse [ESC]; Dr. LOGO abandonará lo que hay en la pantalla y conservará la versión anterior del procedimiento.

Teclee otra vez ed "dibujo, ponga un 8 en lugar del 4, pulse [COPY] para terminar la edición y vuelva a ejecutar el procedimiento para observar el efecto de la modificación. No olvide asignar un valor inicial a :lado.

La memoria utilizada por Dr. LOGO está dividida en nodos. Para averiguar cuántos quedan libres escriba:

nodes

En ocasiones, cuando Dr. LOGO ha utilizado casi todos los nodos disponibles, dedica unos instantes a reorganizar la memoria, durante los cuales se puede observar cómo se para la tortuga. El usuario puede pedir a Dr. LOGO que reorganice la memoria escribiendo la orden

recycle

Esto generalmente permite continuar después de que Dr. LOGO se haya quejado de que no le quedan más nodos libres.

Si piensa grabar sus procedimientos en disco, asegúrese antes de que en el disco haya suficiente espacio libre. Puede para ello utilizar la orden CAT de AMSDOS (véase la parte 7 del Curso de introducción).

Eche un vistazo a las páginas siguientes y pruebe alguno de los ejemplos; no espere entenderlo todo al primer intento. A medida que vaya familiarizándose con Dr. LOGO irá siendo capaz de utilizar nuevas instrucciones.

Cuando desee concluir su sesión de trabajo con Dr. LOGO escriba:

bye

En esta sección damos la relación de las primitivas de Dr. LOGO, agrupadas en clases y ordenadas alfabéticamente dentro de cada grupo. Para la mayor parte de ellas se incluyen ejemplos de aplicación.

Nota
Las primitivas que en esta lista aparecen marcadas con un asterisco (*) no están disponibles en la versión de Dr. LOGO para CP/M 2.2 (cara 4 del juego de discos del sistema). Por consiguiente, los programas que utilicen esas primitivas no serán ejecutables en el CPC664 ni en el CPC464+DDI1, en los cuales sólo se puede utilizar CP/M 2.2 (no CP/M Plus).

Proceso de palabras y listas

(Observe que en los ejemplos hemos incluido los signos ? y > donde corresponde.)

ascii

Da el código ASCII del primer carácter de la palabra de entrada.

?ascii "G
71
?ascii "g
103

bf

(but first, todos menos el primero). Da como salida todos los caracteres de la entrada, salvo el primero.

?bf "trama
rama
?bf [1 2 3]
[2 3]

bl

(but last, todos menos el último). Da como salida todos los caracteres de la entrada, salvo el último.

?bl "tramas
trama
?bl [1 2 3 4]
[1 2 3]

char

Da el carácter cuyo código ASCII es el número de entrada.

?char 83
S

count

(contar). Da el número de elementos de que consta el objeto de entrada.

?count "dos
3 
?count [0 1 2 3]
4

emptyp

(empty property, propiedad de vacío). Da como salida TRUE (verdadero) si la entrada es una palabra vacía o una lista vacía, y FALSE (falso) en caso contrario.

?emptyp "
TRUE
?emptyp []
TRUE
?emptyp [x]
FALSE 
?make "x []
emptyp :x
TRUE

first

(primero). Da como salida el primer elemento del objeto de entrada (sin tener en cuenta los corchetes).

?first "kilo
k
?first [1 2 3]
1

fput

(firsput, poner el primero). Da como salida un objeto formado poniendo el primer objeto de entrada como primer elemento del segundo objeto de entrada.

?fput "t "rama
trama
?fput 1 [2 3]
[1 2 3]

item

(elemento). Da como salida el elemento especificado del objeto de entrada.

?item 4 "grande
n

last (*)

(último). Da como salida el último elemento del objeto de entrada (cfr. first).

?last "pez
z

lc (*)

(lower case, minúsculas). Da como salida la palabra de entrada, pero convirtiendo las mayúsculas a minúsculas. (Véase también uc.)

?lc "NortE
norte

list

Da como salida una lista consistente en los objetos de entrada; conserva los corchetes externos de la lista (compárese con se).

?(list 1 2 3 4)
[1 2 3 4]
?list "garcia [javier]
[garcia [javier]]
?(list)
[]

listp (*)

(list property, propiedad de lista). Da como salida TRUE (verdadero) si la entrada es una lista, y FALSE (falso) en caso contrario.

?listp "madre
FALSE
?listp [padre hermano hermana)
TRUE

lput (*)

(last put, poner el último.) Da como salida un objeto formado poniendo el primer objeto de entrada como último elemento del segundo objeto de entrada.

?lput "r "recto
rector
?lput "r [recto]
[recto r]

memberp (*)

(member property, propiedad de pertenencia). Da como salida TRUE (verdadero) si el primer objeto de entrada es un elemento del segundo objeto de entrada, y FALSE en caso contrario.

?memberp "b "palabra
TRUE
?memberp "chocolate [[vainilla][chocolate][fresa]]
FALSE
?memberp [chocolate] [[vainilla][chocolate][fresa]]
TRUE

numberp

(number property, propiedad de número). Da como salida TRUE (verdadero) si el objeto de entrada es un número, y FALSE (falso) en caso contrario.

?numberp 374.926
TRUE
?numberp "siete
FALSE
?numberp first [2 4 6 8]
TRUE

piece (*)

Da como salida un objeto consistente en los elementos especificados del objeto de entrada.

?piece 2 5 "procedimiento
roce
?piece 3 5 [Tito Juan Miguel Margarita Paco]
[Miguel Margarita Paco]

se

(sentence, frase). Da como salida una lista consistente en todos los objetos de entrada; elimina los corchetes externos de la lista (compárese con list).

?make "lista_instrucciones rl
repeat 4 [fd 50 rt 90]
?run (se "cs :lista_instrucciones "ht)

El signo de subrayar que figura entre lista e instrucciones se obtiene con [SHIFT] 0.

shuffle (*)

(barajar). Da como salida una lista que consta de los mismos elementos que la lista de entrada, pero dispuestos en orden aleatorio.

?shuffle [a b c d]
[c b d a]

uc (*)

(upper case, mayúsculas). Da como salida la palabra de entrada, pero convirtiendo las minúsculas a mayúsculas. (Véase también lc.)

?uc "Letras
LETRAS

where (*)

(dónde). Da como salida el número calculado en la expresión memberp más reciente que haya dado resultado TRUE.

?memberp "r "Amstrad
TRUE
?show where
5

word

(palabra). Da una palabra formada con las palabras de entrada.

?word "nueva "mente
nuevamente

wordp

Da como salida TRUE (verdadero) si el objeto de entrada es una palabra o un número.

?wordp "hola
TRUE
?wordp []
FALSE

Operaciones aritméticas

arctan (*)

Da como salida el arco (en grados) cuya tangente es el número de entrada.

?arctan 0
0
?arctan 1
45

cos

Da como salida el coseno del ángulo de entrada (considerado en grados).

?cos 60
0.5

int

Da la parte entera del número de entrada.

?int 4/3
1

quotient (*)

(cociente). Da el cociente de la división entera de los dos números de entrada.

?quotient 14
4
?14/4
3.5

random

Da un entero aleatorio no negativo menor que el número de entrada.

?random 20
7

remainder (*)

(resto). Da el resto de la división entera de los dos números de entrada, (el primero dividido por el segundo).

?remainder 7
3
?remainder 8
4

rerandom (*)

Hace que una expresión random ulterior reproduzca la misma sucesión aleatoria (char 9 es un tabulador horizontal para espacios.)

?repeat 10 [(type random 10 char 9)]
3    7     5     3     2     0     4     2     6
?repeat 10 [(type random 10 char 9)]
9    9     1     0     6     1     3     5     1
?rerandom
?repeat 10 [(type random 10 char 9)] 
2    2     0     3     1     6     2     3     7
?rerandom
?repeat 10 [(type random 10 char 9)]
2    2     0     3     1     6     2     3     7

round (*)

(redondear). Da como salida el número de entrada redondeado al entero más próximo.

?round 3.333333
3
?round 3.5
4

sin

Da como salida el seno del ángulo de entrada (considerado en grados).

?sin 30
0.5

+

Da la suma de los números de entrada.

?+ 2 2
4
?2+2
4

-

Da la diferencia de los dos números de entrada.

?- 10 5
?10-5
5

*

Da el producto de los números de entrada.

?* 4 6
24
?4*6
24

/

Da el cociente de los dos números de entrada.

?/ 25 5
5
?25/5
5

Operaciones lógicas

and

Da como salida TRUE (verdadero) si el valor lógico de todas las expresiones de entrada es "verdadero", y FALSE (falso) en cualquier otro caso.

?and (3<4) (7>4)
TRUE

not

Da como salida TRUE si la expresión de entrada es "falsa".

Da como salida FALSE si la expresión de entrada es "verdadera".

?not (3=4)
TRUE
?not (3=3)
FALSE

or

Da como salida FALSE (falso) si todas las expresiones de entrada son "falsas", y TRUE en cualquier otro caso.

?or "TRUE "FALSE
TRUE
?or (3=4) (1=2)
FALSE

=

Da como salida TRUE (verdadero) si los dos objetos de entrada son iguales, y FALSE en caso contrario.

?= "LOGO "LOGO
TRUE
?1=2
FALSE

>

Da como salida TRUE (verdadero) si la primera palabra de entrada es mayor que la segunda, y FALSE en caso contrario.

?>19 20
FALSE
?20>19
TRUE

<

Da como salida TRUE (verdadero) si la primera palabra de entrada es menor que la segunda, y FALSE en caso contrario.

?< 27 13
FALSE
?13<27
TRUE

Variables

local

Hace que la variable o variables de entrada sean accesibles solamente al procedimiento actual y a los procedimientos por él invocados.

>(local "x "y "z)

make

(hacer). Asigna a la variable de entrada el valor del objeto de entrada.

?make "lado 50
?:lado
50

namep (*)

(name property, propiedad de nombre). Da como salida TRUE (verdadero) si la palabra de entrada es el nombre de una variable, y FALSE en caso contrario.

?make "sabor "chocolate
?:sabor
chocolate
?namep "sabor
TRUE
?namep "chocolate
FALSE

thing (*)

(cosa). Da el valor de la variable citada.

?make "ordenador "amstrad
?thing "ordenador
amstrad

Procedimientos

define (*)

(definir). Toma como definición del procedimiento especificado la lista de entrada.

?define "cuadrado [[] [repeat 4 [fd 50 rt 90]]]
?po "cuadrado
to cuadrado
repeat 4 [ fd 50 rt 90 ]
end
?text "cuadrado
[[] [repeat 4 [fd 50 mt 90]]]

end

Indica el final de la definición de un procedimiento; la palabra end debe figurar sola al principio de la última línea.

?to cuadrado
>repeat 4 [fd 50 rt 90]
>end
cuadrado defined
?cuadrado

po

(print out, listar). Da el listado de la definición de los procedimientos o variables especificados.

?po "cuadrado
to cuadrado
repeat 4 [fd 50 pt 90]
end
?make "x 3
?po "x
x is 3

pots

(print out titles, listar títulos). Da la lista de los nombres y títulos de todos los procedimientos que hay en el espacio de trabajo.

?pots

text (*)

Da la lista de la definición del procedimiento especificado.

?to estrella ;estrella de cinco puntas
>repeat 5 [fd 30 rt 144 fd 30 lt 72]
>end
estrella defined
?text "estrella
[[] [repeat 5 [fd 30 rt 144 fd 30 lt 72]]] 

to

Señala el inicio de la definición de un procedimiento.

?to cuadrado
>repeat 4 [fd 50 rt 90]
>end
cuadrado defined

Edición

ed

(edit, editar, corregir). Carga los procedimientos o variables especificados en el tampón del editor de pantalla.

?ed "cuadrado

edall (*)

(edit all, editar todos). Carga todas las variables y procedimientos en el tampón del editor de pantalla y entra en el modo de edición.

?edall

edf (*)

(edit file, editar fichero). Lee en el disco el fichero especificado y lo carga en el editor de pantalla. Si no existe ese fichero, lo crea y entra en el modo de edición con el tampón vacío.

?edf "estrella

Funciones de la impresora

copyon (*)

(copia activada). Activa el modo "eco", en el que todos los caracteres que aparecen en la pantalla son reproducidos en la impresora.

?copyon

copyoff (*)

(copia desactivada). Desactiva el modo "eco".

?copyoft

Pantalla de texto

ct

(clear text, borrar texto). Borra la ventana en la que está actualmente el cursor; lleva el cursor al extremo superior izquierdo de la ventana.

?ct

cursor (*)

Da como salida una lista de coordenadas que consiste en los números de columna y fila de la posición actual del cursor en la ventana de texto.

?ct
?cursor
[0 1]
?(type [La posicion del cursor es\ ]) show cursor
La posición del cursor es [26 4]

pr

(print, escribir). Escribe en la pantalla de texto los objetos de entrada; suprime los corchetes externos de las listas; efectúa un retorno del carro después de escribir el último objeto. (Compárese con show y type.)

?pr [a b c]
a b c

setcursor (*)

Sitúa el cursor en la posición especificada por la lista de entrada, que se interpreta como lista de coordenadas de texto.

?ct
?to imagen
>make "x random 20
>make "y random 12
>setcursor list :x :y pr "*
>end
? imagen

setsplit

Especifica el número de líneas de texto que debe tener la pantalla mixta. (Véase ss.)

?setsplit 10

show

(mostrar). Escribe en la pantalla de texto el objeto de entrada; mantiene los corchetes externos de las listas; efectúa un retorno del carro. (Compárese con pr y type.)

?show [a b c]
[a b c]

ts

(text screen, pantalla de texto). Asigna la pantalla completa como pantalla de texto.

?ts

type

(mecanografiar). Escribe en la pantalla los objetos de entrada; suprime los corchetes externos de las listas; no efectúa un retorno del carro después de escribir el último objeto. (Compárese con pr y show.)

?type [a b c]
a b c

Pantalla gráfica

Como puede observar, la pantalla está en modo 1, con cuatro colores posibles; el sistema de coordenadas es igual al de BASIC. Las coordenadas se redondean al número par más próximo correspondiente a un punto de la pantalla. Los colores rojo, verde y azul se pueden graduar con los números 0, 1 y 2.

clean

(limpiar). Borra la pantalla gráfica sin afectar a la tortuga.

?fd 50
?clean

cs

(clear screen, borrar pantalla). Borra la pantalla gráfica y restablece la situación inicial de la tortuga: posición en el punto [0,0] y rumbo 0 grados (norte), pluma abajo.

?rt 90 fd 50
?cs

dot

(punto). Dibuja un punto en la posición especificada por la lista de coordenadas con el color de pluma actual.

?dot [50 10]

dotc (*)

(dot colour, color del punto). Da como salida el número del color que hay en el punto de coordenadas especificadas por la lista de entrada. Si el punto está fuera de la pantalla, da -1.

?cs
?setpc 1
?dot -50 50
?setpc 2
?dot 50 50
?setpc 3
?dot 50 -50
?dotc 50 50
2
?dotc -50 -50
0
?dotc 1000 3000
-1

fence

(valla). Establece un límite que confina la posición de la tortuga a la pantalla gráfica visible. Ese límite se suprime con window.

?fence
?fd 300
Turtle out of bounds

fill (*)

  • No implementada en la versión actual de CP/M Plus.

(rellenar). Rellena un área con el color actual de la pluma; para ello cambia el color del punto que está bajo la tortuga (y todos los puntos contiguos que sean del mismo color) utilizando el estado actual de la pluma.

?make "x 5
?cs
?st
?pd
?repeat 30 [fd :x rt 90 make "x :x + 5]
?fd 20 rt 90
?fd 10
?pu
?home
?bk 2
?pd
?setpc 2
?fill

fs

(full screen, pantalla completa). Asigna la pantalla entera a los gráficos.

?fs

pal

(palette, paleta). Escribe la lista de los números que representan las proporciones de los colores rojo, verde y azul asignadas a la pluma especificada.

?pal 2
[0 2 2]

setbg (*)

(set background, definir fondo). Asigna al color del fondo de la pantalla gráfica el número especificado.

?sf
[0 SS 5 FENCE 1]

(Esto muestra que el color del fondo es cero.)

?pal 0
[0 0 1]
?setbg 2
?st
[2 SS 5 FENCE 1]

setpal

(set palette, definir paleta). Asigna una combinación de colores a la paleta utilizada por la pluma especificada. La lista representa las proporciones de rojo, verde y azul.

?setpal 3[1 1 2]
?pal 3
[1 1 2]

setscrunch (*)

(set scrunch, definir relación de escalas; scrunch significa "estrujar" y hace referencia a la deformación que se produce en las imágenes de la pantalla cuando las escalas vertical y horizontal son distintas). Establece la relación entre las escalas vertical y horizontal en la pantalla gráfica.

?sf
[0 SS 5 FENCE 1]
?to circunferencia
>repeat 360 [fd 1 rt 1]
>end
circunferencia defined
?setscrunch 2
?sf
[0 SS 5 FENCE 2]
?circunferencia
?setscrunch 2.5
?circunferencia

sf

(screen facts, datos de pantalla). Escribe en la pantalla toda la información relativa a la pantalla gráfica. El formato es: [<color de fondo> <estado de pantalla> <líneas texto> <estado de ventana> <relación de escalas>].

  • <color de fondo> es el número de pluma para el fondo (siempre igual a 0 en CP/M 2.2).
  • <estado de pantalla> puede ser SS (pantalla mixta), FS (pantalla completa para gráficos) o TS (pantalla completa para texto).
  • <líneas texto> es el número de líneas reservadas para texto en la pantalla mixta.
  • <estado de ventana> indica el modo WINDOW, WRAP o FENCE.
  • <relación de escalas> representa la relación entre las escalas vertical y horizontal de la pantalla gráfica. Su valor se puede modificar con setscrunch (no en CP/M 2.2).
?st
[0 SS 5 FENCE 2.5)

ss

(split screen, pantalla mixta). Establece una ventana para texto dentro de la pantalla gráfica.

?ss

window

(ventana). Permite que la tortuga se salga de los límites de la pantalla gráfica visible después de una orden wrap o fence.

?fence fd 300
Turtle out of bounds
?window
?fd 300

wrap

(superponer borde con borde). Hace que la tortuga aparezca por el lado opuesto de la pantalla cuando sobrepasa algún borde.

?cs wrap
?rt 5 fd 1000
?cs window
?rt 5 fd 1000

Gráficos de tortuga

bk

(backward, atrás). Mueve la tortuga el número de pasos especificado por el número de entrada, en sentido opuesto al señalado por su rumbo.

?cs fd 150
?bk 50

fd

(forward, adelante). Mueve la tortuga el número de pasos especificado por el número de entrada, en el sentido señalado por su rumbo.

?fd 80

home (*)

Lleva la tortuga a su situación inicial: posición [0 0] (centro de la pantalla gráfica) y rumbo 0 (norte).

?fd 100
?rt 45
?fd 100
?home

ht

(hide turtle, ocultar tortuga). Hace la tortuga invisible, con lo que los dibujos son menos confusos y se realizan a mayor velocidad.

?ht
?cs fd 50
?st 

lt

(left, izquierda). Gira el rumbo de la tortuga hacia la izquierda el número de grados especificado por el número de entrada.

?lt 90

pd

(pen down, bajar pluma). Baja la pluma de la tortuga para que ésta dibuje al moverse.

?fd 20 pu fd 20
?pd
?fd 20

pe

(pen erase, pluma de borrar). Cambia el color de la pluma de la tortuga al color del fondo; la tortuga borra lo que encuentra dibujado en su camino.

?fd 50
?pe
?bk 25
?fd 50
?pd fd 25

pu

(pen up, subir pluma). Sube la pluma de la tortuga para que ésta no dibuje al moverse.

?fd 30
?рu
?fd 30
?pd fd 30

px

(pen exchange, pluma de inversión). Hace que la tortuga cambie el color de los pixels que encuentra coloreados en su camino por el color complementario o inverso.

?fd 20 pu fd 20
?pd setpc 3 fd 20
?px 
?bk 80
?fd 80
?pd bk 100

rt

(right, derecha). Gira el rumbo de la tortuga hacia la derecha el número de grados especificado por el número de entrada.

?rt 90

seth

(set heading, establecer rumbo). Orienta la tortuga en el rumbo absoluto especificado por el número de entrada (en grados). Los números positivos la hacen girar en el sentido de las agujas del reloj; los negativos, en el sentido contrario.

?seth 90

setpc

(set pen colour, establecer color de pluma). Asigna a la tortuga la pluma especificada por el número de entrada.

?setpc 1

setpos

(set position, establecer posición). Lleva la tortuga al punto especificado por la lista de coordenadas de entrada.

?setpos [30 20]

setx (*)

Lleva la tortuga a un punto cuya coordenada X es la especificada, sin modificar la coordenada Y. (Véase también sety.)

?setx 80
?fd 100
?setx -50
?fd 50

sety (*)

Lleva la tortuga a un punto cuya coordenada Y es la especificada, sin modificar la coordenada X. (Véase también setx.)

?sety 90
?fd 20
?sety -50
?fd 50

st

(show turtle, mostrar tortuga). Hace la tortuga visible, si estaba oculta.

?ht
?fd 50
?st

tf

(turtle facts, datos de tortuga). Escribe en la pantalla la información relativa a la tortuga. El formato es: [<coor x> <coor y> <rumbo> <estado de pluma> <pluma n> <visible>].

  • <coor x> y <coor y> son las coordenadas de la posición actual de la tortuga.
  • <rumbo> es la orientación actual de la tortuga.
  • <estado de pluma> indica PD (pluma bajada), PE (pluma de borrar), PX (pluma de inversión) o PU (pluma subida).
  • <pluma n> indica el número de pluma de la tortuga.
  • <visible> es TRUE (verdadero) si la tortuga es visible.
?setpos [15 30]
?rt 60
?setpc 3
?pe
?ht
?tf
[15 30 60 PE 3 FALSE)

towards (*)

(hacia). Da como salida un rumbo tal que, si la tortuga lo tuviera, "miraría" hacia la posición especificada con la lista de coordenadas.

  ?seth towards list :x :y

Gestión del espacio de trabajo

er

(erase, borrar). Borra del espacio de trabajo los procedimientos especificados.

?er "cuadrado

erall (*)

(erase all, borra todos). Borra del espacio de trabajo todos los procedimientos y variables.

?erall

ern

(erase name, borrar nombre). Borra del espacio de trabajo las variables especificadas.

?make "lado [100]
?make "angulo [45]
?:lado :angulo
[100]
[45]
?ern [lado angulo]
?:lado
lado has vo value

nodes

Da el número de nodos que quedan libres en el espacio de trabajo.

?nodes

noformat (*)

Elimina del espacio de trabajo el formato de los procedimientos, incluidos los comentarios, con el fin de liberar nodos.

?to cuadrado
>pd 
>repeat 4
>  [fd 50 ; esto es lo
>  rt 90] ; que se repite
>pu
>end
cuadrado defined
?noformat
?po "cuadrado
to cuadrado
pd
repeat 4 [fd 50 rt 90]
pu
end

poall (*)

Muestra las definiciones de todos los procedimientos y variables del espacio de trabajo.

?poall

pons (*)

Muestra los nombres y valores de todas las variables globales del espacio de trabajo.

?pons
medio es 40
pequeno es 20
grande es 80

pops (*)

Muestra los nombres y definiciones de todos los procedimientos del espacio de trabajo.

?pops

recycle

Libera el mayor número posible de nodos y reorganiza el espacio de trabajo.

?recycle
?nodes

Listas de propiedades

glist

(get list, obtener lista). Da una relación de todos los objetos del espacio de trabajo que tienen la propiedad de nombre especificado en sus respectivas listas de propiedades.

?glist ".DEF

gprop

(get property, obtener propiedad). Da el valor que tiene en el objeto de entrada la propiedad cuyo nombre se especifica.

?make "estatura "172
?gprop "estatura ".APV
172

plist

(property list, lista de propiedades). Escribe la lista de propiedades del objeto de entrada.

?plist "estatura
[.APV 172]

pprop

(put property, poner propiedad). Pone el par de propiedades de entrada en la lista de propiedades del objeto especificado.

?pprop "usted ".APV "lector
?:usted
lector

pps (*)

(property pairs, pares de propiedades). Muestra todos los pares de propiedades no estándar de todos los objetos que hay en el espacio de trabajo.

?pprop "Sally "extension 213
?pps
Sally's extension is 213
?plist "Sally
[extension 213]

remprop

(remove property, retirar propiedad). Suprime la propiedad especificada de la lista de propiedades del objeto de entrada.

?remprop "usted ".APV

Ficheros en disco

changef (*)

(change file, cambiar fichero). Cambia el nombre de un fichero en el directorio de un disco.

?dir
[CUADRADO CIRCULO ESTRELLA]
?changef "circunferencia "circulo
?dir
[CUADRADO CIRCUNFERENCIA ESTRELLA]

defaultd (*)

(default drive, unidad implícita). Da el nombre de la unidad de disco implícita.

?defaultd
A:

dir

(directory, directorio). Da la lista de todos los nombres de ficheros creados por Dr. LOGO que se encuentran en la unidad de disco implícita; acepta símbolos comodín.

?dir "a:????????

(Consulte la parte 1 del capítulo AMSDOS y CP/M, donde se explica cómo utilizar los símbolos comodín; Dr. LOGO no acepta el *.)

dirpic (*)

(picture, imagen). Da la lista de los nombres de los ficheros que contienen imágenes de pantalla en la unidad especificada (o en la implícita, si no se especifica otra). Acepta símbolos comodín.

?dirpic
[JUEGO CUADRADOS CIUDAD ESFERA_RELOJ]

load

Lee el fichero especificado y lo carga en el espacio de trabajo.

?load "prueba
?load "b:dibujos

loadpic (*)

Lee el fichero de imagen especificado y forma la imagen correspondiente en la pantalla.

?loadpic "juego
?loadpic "b:juego

save

Graba en el disco el contenido del espacio de trabajo, con el nombre de fichero especificado.

?save "dibujos
Nota.
Antes de grabar, inserte un disco inicializado en el que quede espacio suficiente para el fichero que vaya a grabar. No grabe nunca nada en el disco maestro (de hecho, los orificios de protección de los discos maestros deben estar siempre cerrados).
Si está utilizando la versión de Dr. LOGO para CP/M 2.2 (cara 4), no podrá cambiar el disco a mitad de la sesión de trabajo. En este caso es aún más importante disponer de un disco de trabajo con CP/M 2.2 y Dr. LOGO en el que haya abundante espacio libre para grabar programas.

savepic (*)

Graba en el disco información completa sobre la imagen que hay en la pantalla, con el nombre de fichero especificado.

?savepic "estera reloj
?savepic "b:estera reloj
Nota.
Antes de grabar, inserte un disco inicializado en el que quede espacio suficiente para el fichero que vaya a grabar. No grabe nunca nada en el disco maestro (de hecho, los orificios de protección de los discos maestros deben estar siempre cerrados).
Si está utilizando la versión de Dr. LOGO para CP/M 2.2 (cara 4), no podrá cambiar el disco a mitad de la sesión de trabajo. En este caso es aún más importante disponer de un disco de trabajo con CP/M 2.2 y Dr. LOGO en el que haya abundante espacio libre para grabar programas.

setd (*)

(definir unidad). Establece como unidad implícita la especificada.

?defaultd
A:
?dir
[CUADRADO CIRCUNFERENCIA ESTRELLA]
?setd b:
?defaultd
B:
?dir
[TRIANGULO CASA]

Teclado y joystick

buttonp

(button pressed, botón pulsado). Da como salida el valor lógico TRUE (verdadero) si está pulsado el botón del joystick cuyo número se especifica (0 o 1).

?to disparo
>label "bucle
>if (buttonp 0) [pr [fuego el 0!]]
>if (buttonp 1) [pr [fuego el 1!]]
>go "bucle
>end

La situación de la empuñadura se determina con paddle.

keyp

(key pressed, tecla pulsada). Da como salida el valor lógico TRUE (verdadero) si se ha tecleado alguna tecla y está en espera de ser leída.

?to tecla
>if keyp [op rc] [op "]
>end

paddle

Determina la situación del joystick 0 o el 1. El significado de los valores generados es el siguiente:

ValorSignificado
255Inactivo
0Arriba
1Arriba y a la derecha
2A la derecha
3Abajo y a la izquierda
4Abajo
5Abajo y a la izquierda
6A la izquierda
7Arriba y a la izquierda
?paddle 0
255

Los botones de disparo se comprueban con buttonp.

rc

(read character, leer carácter). Da como salida el primer carácter que se teclee a continuación.

?make "tecla rc

... ahora teclee una X ...

?:tecla
X

rl

(read list, leer lista). Da como salida una lista que consiste en la línea que se va a teclear a continuación. La entrada tiene que terminar con un retorno del carro.

?make "lista_instrucciones rl
repeat 4 [fd 50 rt 90]
?:lista_instrucciones
[repeat 4 [fd 50 rt 90]

rq

(read quote, leer literalmente). Da como salida una palabra que consiste en la línea que se va a teclear a continuación. La entrada tiene que terminar con un retorno del carro.

?make "orden rq
repeat 3 [fd 60 rt 120]
?:orden
repeat 3 [fd 60 rt 120]

Sonido

Las órdenes de sonido son peculiares de la implementación para AMSTRAD de Dr. LOGO; son similares a sus análogos en BASIC.

Consulte la parte 9 del Curso de introducción.

sound

Envía un sonido a la cola de sonidos. El formato es: [<situación de canales> <periodo de tono> <duración> <volumen> <envolvente de volumen> <envolvente de tono> <ruido>]. Solamente los dos primeros parámetros son obligatorios.

?sound [1 20 50]

env

Define una envolvente de volumen. El formato es: [<número de la envolvente> <secciones de envolvente>].

?env [1 100 2 20]
?sound [1 200 300 5 1]

ent

Define una envolvente de tono. El formato es: [<número de la envolvente> <secciones de envolvente>].

?ent [1 100 2 20]
?sound [1 200 300 5 1]

release

Libera los canales de sonido que han sido retenidos en una orden sound. Los canales que se liberan son:

Valor de entradaCanales liberados
0Ninguno
1A
2B
3A y B
4C
5A y C
6B y C
7A, B y C
?release 1

Control de ejecución

bye

Da por terminada la actual sesión de trabajo con Dr. LOGO.

?bye

со

Reanuda la ejecución tras una pausa provocada por [CONTROL] Z, pause o ERRACT.

?co

go

Ejecuta la línea del procedimiento actual que está identificada por la etiqueta que se menciona como entrada.

>go "bucle

if

Ejecuta una de dos listas de instrucciones, dependiendo del valor lógico de la expresión de entrada; las instrucciones deben ser listas literales entre corchetes. La segunda lista es opcional.

>if (a>b) [pr [a es mayor]]
>[pr [b es mayor]]

label

Identifica una línea para que pueda ser ejecutada por una instrucción go.

> label "bucle

op

(output, salida). Convierte el objeto de entrada en la salida del procedimiento y da por terminada la ejecución de éste.

?op [resultado]

repeat

Ejecuta la lista de instrucciones el número de veces especificado.

?repeat 4 [fd 50 rt 90]

run

Ejecuta la lista de instrucciones especificada.

?make "lista_instrucciones [fd 40 rt 90]
?run :lista_instrucciones

stop

Detiene la ejecución del procedimiento actual y retorna a TOPLEVEL (nivel exterior, donde aparece el signo ?) o al procedimiento que lo invocó.

?stop

wait

Introduce en la ejecución del procedimiento una pausa de duración especificada (en unidades de 0.022 segundos).

?wait 200

Gestión de excepciones/errores

catch

Intercepta errores y situaciones especiales que ocurran durante la ejecución de la lista de entrada.

>catch "error [+ [] []]
>pr [aqui estoy]
aqui estoy

error

Da una lista cuyos elementos describen el error más reciente.

>catch "error [seguir.hasta.error]
>show error

notrace (*)

Desactiva el modo "trace" de ejecución de los procedimientos. (Véase trace.)

?notrace

nowatch (*)

Desactiva el modo "watch" de ejecución de los procedimientos. (Véase watch.)

?nowatch

pause

Suspende la ejecución del procedimiento actual para permitir la interacción con el intérprete o el editor.

>if :lado>5 [pause]

throw

Ejecuta la línea identificada por el nombre de entrada de una expresión catch anterior.

?throw "TOPLEVEL

trace (*)

Establece un modo de ejecución de procedimientos consistente en que en la pantalla se indica que procedimiento está siendo ejecutado en cada momento.

?trace

watch (*)

Establece un modo de ejecución de procedimientos consistente en que en la pantalla se indica que instrucción va a ser ejecutada y se hace una pausa para que el usuario observe o modifique la evolución del procedimiento.

?watch

Primitivas del sistema

.contents

Muestra el contenido del espacio para símbolos de Dr. LOGO.

.deposit

Escribe el segundo número de entrada en la posición absoluta de memoria especificada por el primero.

.examine

Muestra el contenido de la posición absoluta de memoria especificada.

.in (*)

Lee el valor presente en la puerta especificada.

.out (*)

Envía el valor especificado a la puerta especificada.

Variables del sistema

ERRACT

Si tiene el valor lógico TRUE (verdadero), introduce una pausa cuando se produce un error y luego retorna a TOPLEVEL.

FALSE

Valor de sistema. (Falso.)

REDEFP

Si tiene el valor lógico TRUE (verdadero), permite la redefinición de primitivas.

TOPLEVEL

throw "TOPLEVEL provoca la salida de todos los procedimientos pendientes (volviendo al nivel exterior).

TRUE

Valor de sistema. (Verdadero.)

Propiedades del sistema

.APV

Valor de propiedad asociado; es el valor de una variable global.

.DEF

Definición de un procedimiento,

.ENL (*)

Fin de una línea de procedimiento que está partida por un retorno del carro o por espacios.

.EMT (*)

Principio de una línea de procedimiento que está partida por un retorno del carro o por espacios.

.PRM

Identifica una primitiva.

.REM (o bien ;) (*)

Observaciones o comentarios.