Jugando con Logo o primeros pasos en Logo ;)

Programando el Amstrad en BASIC, C, etc.
Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Jugando con Logo o primeros pasos en Logo ;)

Mensajepor Artaburu » Vie 06 Jun , 2008 8:14 am

Pues creo que abrimos este temita para ir reflejando nuestros experimentos con este lenguaje. Si tenéis alguna propuesta por hacer, genial. Tampoco tengo muy claro hasta dónde llega el Logo y no se muy bien qué se le puede pedir. En cualquier caso, como esto es para principiantes, he aquí el típico Hola Mundo:

Código: Seleccionar todo

type[Hola Mundo]
Como véis, en Logo no se usan las comillas si no los corchetes.
Salu2,
Arta

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor nacho » Sab 07 Jun , 2008 11:53 am

Ahora me toca ;-)

Logo se consideraba un lenguaje muy adecuado para introducir a los niños de corta edad en el mundo de la informática y en concreto en el de la programación, porque se trataba de un lenguaje razonablemente intuitivo, y en el que es fácil obtener resultados visibles (y vistosos) en muy poco tiempo (de hecho, en España todavía es parte del temario de la asignatura de Tecnología en ciertos cursos de educación secundaria).

Una de las características del lenguaje que más ayudaba en este sentido era la facilidad para crear "gráficos de tortuga", que se podían representar en pantalla mediante el movimiento de un cursor gráfico, pero que también podían ser "todavía más vistosos" para los afortunados que podían conectar un robot móvil (la "tortuga") al ordenador, que tenía una pluma acoplada, con la que era capaz de dibujar sobre una superficie (algo que yo sólo he visto en fotos, no he manejado en persona).

Por eso, yo voy a hacer el primer acercamiento a los gráficos de tortuga...

En el caso de los CPC con DrLogo, la tortuga era un cursor gráfico en forma de flecha, que imitaba el funcionamiento del robot que he comentado antes. Las órdenes más sencillas eran las de avanzar (que dibujará, si la "pluma" está "abajo") y la de girar a derecha o izquierda. Para que el robot se moviera sin dibujar, se podía decir que subiera la pluma, y después que la bajara para seguir dibujando.

Como suele ocurrir, las órdenes son abreviaturas de palabras en inglés (aunque existen versiones de Logo traducidas al castellano). Las más habituales son:

- fd, abreviatura de "forward", para avanzar un cierto número de píxeles. Por ejemplo "fd 50"

- rt, abreviatura de "right", para girar un cierto número de grados a la derecha, como en "rt 90"

- lt, de "left", para girar a la izquierda.

- pu, de "pen up", para levantar la pluma, de modo que la tortuga se mueva sin dibujar (si no se dice otra cosa, se da por sentado que la pluma está bajada).

- pd, de "pen down", para bajar la pluma, y, por tanto, dibujar cuando se mueva (es lo que ocurre nada más entrar a DrLogo).

- cs, de "clear screen", para borrar la pantalla (no tiene sentido con un robot tortuga, pero en pantalla es evidente que sí, y más cuando uno hace pruebas ;-) )

Con eso ya sabemos dibujar un cuadrado: podemos dibujar 40 líneas de 50 píxeles (comenzará en sentido vertical, hacia arriba) y girar 90 grados a la derecha tras cada línea:

Código: Seleccionar todo

fd 50
rt 90
fd 50
rt 90
fd 50
rt 90
fd 50
Las órdenes se pueden encadenar una a continuación de otra, sin necesidad de delimitarlas con punto y coma ni de usar números de línea: "fd 50 rt 90" es una orden válida.

De hecho, una forma más elegante de conseguir dibujar un cuadrado es repetir cuatro veces la orden de dibujar y la de girar, así:

Código: Seleccionar todo

repeat 4 [fd 50 rt 90]
La serie de órdenes a repetir se indica entre corchetes, igual que los textos a escribir con "type".

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor nacho » Sab 07 Jun , 2008 12:02 pm

¿Cómo probar estos ejemplos?

Estamos en un foro de usuarios de CPC, así que me centraré en cómo hacerlo desde un CPC, claro...

DrLogo (la versión de Logo creada por Digital Research) se incluía junto con el sistema operativo CP/M. Yo usaré Logo3, que es la que venía con CP/M Plus.

En mi caso, los pasos que he seguido, han sido:

- Entrar a un emulador (WinApe, que es más legible en 80 columnas que CPCE) o al CPC (664 o superior).

- Buscar los discos de CP/M. Yo tengo un fichero CPM.ZIP de 329 Kb de tamaño (que no recuerdo de cual de todos los sitios de CPC obtuve), que a su vez contiene 4 ficheros DSK que son los 4 discos de CP/M.

- Logo3 se encuentra en el tercer disco, pero este disco no contiene el arranque de CP/M. Por tanto, yo he arrancado con el disco 2 (que es de CP/M Plus), tecleando |CPM. Cuando el sistema estaba cargado, he insertado el disco de DrLogo, he tecleado "logo3" y después... a jugar... ;-)

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor Artaburu » Sab 07 Jun , 2008 4:17 pm

Genial, empiezas muy bien Nacho, una buena introducción ;)
Salu2,
Arta

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor nacho » Dom 08 Jun , 2008 8:48 pm

Eso quiere decir que siga? ;-)

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor Artaburu » Dom 08 Jun , 2008 9:06 pm

Por mí sí, yo voy a ver cómo va la manipulación de listas y ver para qué se pueden usar.
Salu2,
Arta

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor nacho » Dom 08 Jun , 2008 11:01 pm

Todavía es un poco pronto para las listas. Yo aún daría unos pocos pasos intermedios.

El primero sería hablar de variables.

A una variable se le da valor con la orden "make", seguido de un espacio, comillas y el nombre de la variable, otro espacio y el valor de la variable (no se cierran las comillas): make "numero 10

Para acceder al valor de la variable, se precede con el símbolo de dos puntos (:), así: type :numero

Código: Seleccionar todo

make "numero 10
type :numero
En este caso, se ve que cuando se trata de una variable, no hace falta indicar corchetes en "type". También se puede mostrar el valor de la variable sin necesidad de usar la orden type, simplemente tecleando el símbolos de dos puntos y el nombre de la variable:

Código: Seleccionar todo

make "numero 20
:numero
Un primer ejemplo "serio" del uso de variables numéricas podría ser dibujar una espiral, con varios lados, cuyo tamaño se va incrementando:

Código: Seleccionar todo

make "lado 20
repeat 15 [fd :lado rt 90 make "lado :lado+5]

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor Artaburu » Lun 09 Jun , 2008 10:53 am

Vale, hablaremos de las listas más adelante. Pero es que me resulta tan tentador... yo voy a ir preparando algo sobre ellas.
Salu2,
Arta

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor Artaburu » Lun 09 Jun , 2008 1:17 pm

- Logo3 se encuentra en el tercer disco, pero este disco no contiene el arranque de CP/M. Por tanto, yo he arrancado con el disco 2 (que es de CP/M Plus), tecleando |CPM. Cuando el sistema estaba cargado, he insertado el disco de DrLogo, he tecleado "logo3" y después... a jugar... ;-)
Por cierto, si tecleamos

Código: Seleccionar todo

submit logo3
en lugar de logo3 a secas, se maneja mejor el logo porque se carga el teclado para su uso en logo.

¡Más! que yo estoy deseoso de listas y no puedo más. Este programita lo que hace es seleccionar elementos de la lista según la tecla que se pulse.

Código: Seleccionar todo

make "listado [A B C]

to prueba
type first :listado
make "tecla rc
if (:tecla="s) [show item 2 :listado] [show item 3 :listado]
end
Asigno a la variable listado una lista.
Creo un procedimiento nuevo que se llama prueba. Lo que hace es mostrar el primer elemento, esperar una tecla, si es s muestra el elemento 2 y si no el 3.

Si os dais cuenta, una lista está compuesta de elementos, y cada elemento puede ser a su vez una lista. Con esta cosa tan simple se pueden tener árboles con los que se puede hacer algo de inteligencia artificial. Ya avanzaremos en este aspecto en cuanto consiga aprender a hacer lo que quiero: El juego animal, mineral, vegetal ;)

Para editar un procedimiento por si hay algún error o se quiere cambiar algo se emplea ed. En nuestro ejemplo ed "prueba.
Si se pulsa [ESC] se sale de la edición sin grabar los cambios, con [COPY] se sale grabando los cambios.
Salu2,
Arta

Avatar de Usuario
nacho
Keeper of The Forum
Keeper of The Forum
Mensajes: 572
Registrado: Jue 06 Dic , 2007 2:58 pm

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor nacho » Mié 11 Jun , 2008 12:23 pm

Ahí hay mucha tela metida... ;-)

Voy a algún detalle más sobre los procedimientos:

Podemos dar un "nombre" a un conjunto de operaciones, para luego poder repetirlas de forma sencilla. Esto es lo que se conoce como un "procedimiento" (a quien ya haya programado algo, le sonará a los PROCEDURE de Pascal, las funciones "void" de C y sus derivados, o los SUB de ciertas versiones de Basic).

La forma de hacer esto en LOGO es comenzando con la palabra "to" (para) y el nombre que le queremos dar al procedimiento. Luego detallamos los pasos, y finalmente terminamos con "end" (fin). Por ejemplo, podríamos crear un procedimiento capaz de dibujar un hexágono con:

Código: Seleccionar todo

to hexagono
repeat 6 [ fd 50 lt 60 ]
end
Para recordarnos que estamos en modo de edición de un procedimiento, el DrLogo de nuestro CPC cambiará el cursor que nos avisa de que está esperando órdenes: pasa de ser la interrogación (?) al símbolo de "mayor que" (>).

Para probar ese procedimiento, basta con teclear su nombre:

Código: Seleccionar todo

hexagono
Pero falta un detalle: lo habitual es que un procedimiento como este no siempre trabaje con los mismos datos. Por ejemplo, podemos querer dibujar hexágonos de cualquier tamaño de lado, no siempre de 50 píxeles. La forma de conseguirlo es indicando parámetros a este procedimiento, que se detallan a continuación del nombre y se usan en el cuerpo del procedimiento:

Código: Seleccionar todo

to hexagonolado :lado
repeat 6 [ fd :lado lt 60 ]
end
Y para lanzarlo, indicaríamos el tamaño a continuación del nombre del procedimiento:

Código: Seleccionar todo

hexagonolado 70
Ahora podríamos hacer un precioso tunel hexagonal, como el interior de las estaciones espaciales de las películas de ciencia ficción ;-) si dibujamos varios hexágonos cada vez mayores, uno dentro de otro, pero unidos por un lado:

Código: Seleccionar todo

to tunelhexagonal
make "lado 10
rt 90
repeat 10 [ hexagonolado :lado make "lado :lado+10 ]
end

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8420
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: Jugando con Logo o primeros pasos en Logo ;)

Mensajepor Artaburu » Mié 11 Jun , 2008 5:09 pm

nacho, una curiosidad... ¿Sabes Logo o estás también aprovechando ahora para aprender? No lo digo con sorna, ¿eh? es que me sorprende lo didáctico que eres ;)

Un poco más sobre variables. El Logo maneja listas, números y cadenas que yo haya podido observar hasta el momento. Lo que no se hace es definir una variable indicando un tipo como se hace en C o se puede hacer en BASIC, basta, como ya comentó nacho, asignar a un nombre un valor mediante make.
Dentro de una lista puede haber otras listas u otros elementos como números o cadenas, por ejemplo, la expresión [12 [Me llamo Pepe] 3 [1 1]] sería válida.
El separador de las listas es el espacio. Para guardar una frase en una variable se definiría en una lista, así [Me llamo Pepe] es una frase en una lista, que no una frase lista :mrgreen:
Salu2,
Arta


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic