0% encontró este documento útil (0 votos)
57 vistas78 páginas

Manual

Este manual describe las características y funcionalidades del programa XLogo. Explica la interfaz gráfica, los menús, las convenciones adoptadas como comandos y sintaxis, una lista de primitivas, estructuras de control, modos como multitortuga, música MIDI, entrada de usuario, gestión de tiempos y red. También incluye ejemplos de programas como dibujar casas y un copo de nieve.

Cargado por

Btp Infor
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
57 vistas78 páginas

Manual

Este manual describe las características y funcionalidades del programa XLogo. Explica la interfaz gráfica, los menús, las convenciones adoptadas como comandos y sintaxis, una lista de primitivas, estructuras de control, modos como multitortuga, música MIDI, entrada de usuario, gestión de tiempos y red. También incluye ejemplos de programas como dibujar casas y un copo de nieve.

Cargado por

Btp Infor
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Manual del Usuario

Original en Francés: Loı̈c Le Coq

Traducción: Marcelo Duschkin y Álvaro Valdés

[Link]
Índice general

1. Presentación 5
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2. Caracterı́sticas de la Interfaz 6
2.1. Primera Ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2. La ventana principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3. El editor de procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4. Salir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3. Opciones del Menú 10


3.1. Menú “Archivo” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2. Menú “Edición” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Menú “Herramientas” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4. Menú “Ayuda” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4. Convenciones adoptadas para XLogo 18


4.1. Comandos y su interpretación . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.3. El caracter especial \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4. Mayúsculas y minúsculas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.5. Operadores y sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.5.1. Operadores aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.5.2. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5. Listado de primitivas 22
5.1. Movimientos de la tortuga; poner lápiz y colores . . . . . . . . . . . . . . . 22
5.1.1. Movimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.1.2. Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.1.3. Acerca de los colores . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.1.4. Animación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.5. Propiedades del Histórico de Comandos . . . . . . . . . . . . . . . . 28
5.2. Operaciones aritméticas y lógicas . . . . . . . . . . . . . . . . . . . . . . . 29
5.3. Operaciones con listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.4. Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.5. Trabajando con procedimientos y variables . . . . . . . . . . . . . . . . . . 34
5.5.1. Acerca de los procedimientos . . . . . . . . . . . . . . . . . . . . . 34
5.5.2. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.5.3. Variables fijas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2
ÍNDICE GENERAL 3

5.5.4. Variables opcionales . . . . . . . . . . . . . . . . . . . . . . . . . . 35


5.5.5. Conceptos acerca de variables . . . . . . . . . . . . . . . . . . . . . 36
5.5.6. La primitiva trazado . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.6. Manejo de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.7. Función avanzada de relleno . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.8. Comandos de ruptura de secuencia . . . . . . . . . . . . . . . . . . . . . . 42

6. Condicionales 43

7. Bucles y recursividad 44
7.1. Bucle con repite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.2. Bucle con repitepara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.3. Bucle con mientras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.4. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

8. Modo multitortuga 47

9. Tocar música (MIDI) 48

[Link] entrada del usuario 50


10.1. Interactuar con el teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10.2. Interactuar con el ratón . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
10.3. Componentes Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
10.3.1. Crear un componente gráfico . . . . . . . . . . . . . . . . . . . . . . 53

[Link]́n de tiempos 56

[Link]́n de la red con XLogo 58


12.1. La red: ¿cómo funciona eso? . . . . . . . . . . . . . . . . . . . . . . . . . . 58
12.2. Primitivas orientadas a la red . . . . . . . . . . . . . . . . . . . . . . . . . 58

[Link] de programas 61
13.1. Dibujar casas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
13.2. Dibujar un rectángulo sólido . . . . . . . . . . . . . . . . . . . . . . . . . . 62
13.3. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
13.4. Copo de nieve (Gracias a Georges Noël) . . . . . . . . . . . . . . . . . . . 63
13.5. Escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
13.6. Conjugación (sólo verbos regulares) . . . . . . . . . . . . . . . . . . . . . . 64
13.6.1. Primera versión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
13.6.2. Segunda versión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
13.6.3. Tercera versión (con recurrencia) . . . . . . . . . . . . . . . . . . . 65
13.7. Colores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
13.7.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
13.7.2. Práctica: Escala de grises . . . . . . . . . . . . . . . . . . . . . . . . 66
13.7.3. Negativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
13.8. Listas (Gracias a Olivier SC) . . . . . . . . . . . . . . . . . . . . . . . . . . 68
13.9. Un lindo medallón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4 ÍNDICE GENERAL

[Link] de XLogo 70
14.1. Desinstalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
14.2. El sitio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
14.3. Acerca de este documento . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

[Link] de Preguntas – Artimañas – Trucos que conocer 71


15.1. Preguntas frecuentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
15.2. ¿Cómo puedo ayudar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Capı́tulo 1

Presentación

1.1. Introducción
Logo es un lenguaje desarrollado en los años 70 por Seymour Papert. Es un lengua-
je excelente para comenzar a estudiar programación, y enseña lo básico acerca de temas
como bucles, condicionales, procedimientos, etc. El usuario puede mover un objeto llamado
“tortuga” dentro de la pantalla, usando instrucciones (comandos) simples como “avanza”,
“retrocede”, “giraderecha” y similares. Con cada movimiento, la tortuga deja un “rastro”
(dibuja una lı́nea) tras de sı́, y de esta manera se crean gráficos. También es posible operar
con palabras y listas.

Este estilo gráfico hace de Logo un lenguaje ideal para principiantes, y especialmente
fácil para los niños.

XLogo es un intérprete Logo escrito en Java. Actualmente soporta siete idiomas


(Francés, Inglés, Español, Portugués Galés, Árabe y Esperanto) y se distribuye bajo licencia
GPL. Por lo tanto, este programa es libre en cuanto a libertad y gratuidad.

1.2. Java
Como hemos mencionado, XLogo está escrito en Java. Java es un lenguaje que tiene
la ventaja de ser multi-plataforma; esto es, XLogo podrá ejecutarse en cualquier siste-
ma operativo que soporte Java; tanto usando Linux como Windows o MacOS, XLogo
funcionará sin problemas.

5
Capı́tulo 2

Caracterı́sticas de la Interfaz

2.1. Primera Ejecución


La primera vez que ejecute XLogo (o si ha borrado el fichero .xlogo – ver sección 14.1)
deberá elegir el idioma con que quiere trabajar, seleccionando la bandera correspondiente
y haciendo click en el botón OK.

Esta elección no es definitiva; puede elegir otro idioma en cualquier momento desde las
opciones de menú (sección 3.3)

2.2. La ventana principal

6
2.3. EL EDITOR DE PROCEDIMIENTOS 7

En la fila superior, están las entradas tı́picas de menú: Archivo, Edición, Herra-
mientas, Ayuda

Justo debajo está la Lı́nea de Comando, donde se escriben las instrucciones Logo.

En el medio de la pantalla, está el Área de Dibujo (donde se mueve la tortuga).

A la derecha del área de dibujo se encuentra una barra de herramientas vertical con
las funciones zoom (acercar y alejar), copiar, cortar , pegar y Comando de Inicio.

Al pie, está la ventana del Histórico de Comandos, que muestra todo lo ingresado
y sus respuestas asociadas. Para reutilizar un comando previamente ingresado, hay
dos opciones: Hacer un click en un comando del histórico, o usar las teclas de flecha
arriba y flecha abajo del teclado (lo que es más práctico).

A la derecha de la ventana del histórico hay dos botones: Editar y Alto.

• Editar permite abrir la ventana del editor de procedimientos.


• Alto interrumpe la ejecución del programa ingresado.

2.3. El editor de procedimientos

Hay tres maneras de abrir el editor:

Escribir ed en la Lı́nea de Comando. La ventana del editor se abrirá mostrando


todos los procedimientos definidos hasta ese momento. Si deseas editar un procedi-
miento en especial (o algunos), debes escribir:
ed [proc_1 proc_2]

Hacer click en el botón Editar.

Usar el atajo de teclado Alt+E

Estos son los diferentes botones que encontrarás en la ventana del Editor:

Guarda en memoria los cambios hechos en el editor y cierra la


ventana. Es este botón el que se debe usar cada vez que quieras
aplicar los procedimientos recientemente incorporados.
Atajo de teclado: ALT+Q.
Cierra la ventana del editor sin guardar los últimos cambios.
Ten presente que NO aparece ningún mensaje de confirmación.
Asegúrate bien de que realmente no hay nada que guardar.
Atajo de teclado: ALT+C.
8 CAPÍTULO 2. CARACTERÍSTICAS DE LA INTERFAZ

Imprime el contenido del editor.

Copia el texto seleccionado al portapapeles.


Atajo de teclado: Control+C.

Corta el texto seleccionado y lo copia al portapapeles.


Atajo de teclado: Control+X.

Pega el contenido del portapapeles.


Atajo de teclado: Control+V.

Permite realizar búsquedas y reemplazos en los procedimientos.

En la parte inferior se encuentra lı́nea donde definir el Comando de Inicio, que se ac-
tiva con el botón situado a la derecha del Área de Dibujo.

Al pulsar el botón, se ejecuta inmediatamente el Comando de Inicio sin necesidad de


escribirlo en la Lı́nea de Comandos, lo que es útil para:

Ahorrar tiempo mientras se desarrolla un programa

Al enviar un programa a alguien que se inicia en Logo, simplemente tiene que hacer
“click ” en ese botón para ejecutarlo

...

IMPORTANTE:

Nota que hacer click en el icono de cierre ( ) de la barra de tı́tulo de la ventana del
Editor, no hace nada. Solamente funcionan los dos botones principales.

Para borrar los procedimientos que no se necesitan, usa los comandos borra y bo-
rratodo o en la barra de menús: Herramientas → Borra procedimientos.
2.4. SALIR 9

Al hacer click para imprimir, aparecerá una ventana de diálogo donde podremos configurar
distintas opciones de impresión:
General: Impresora a utilizar, Imprimir a un archivo, Rango de Impresión y Número
de copias.

Configurar Página: Tipo de papel, Origen del papel, Orientación de la Hoja y


Márgenes

Aspecto: Color (cuando disponible), Calidad, Caras y otros Atributos

2.4. Salir
Para salir simplemente seleccionamos: Archivo → Salir, o hacemos click en en el icono
de cierre ( ). XLogo presentará una ventana de confirmación:

Pulsamos Sı́ y termina la ejecución.


Capı́tulo 3

Opciones del Menú

3.1. Menú “Archivo”


Archivo → Nuevo: Elimina todos los procedimientos y variables definidos hasta el
momento para comenzar un nuevo espacio de trabajo. Se abrirá una ventana para
confirmar la eliminación de todos los procedimeintos y variables:

Archivo → Abrir: Carga un archivo Logo previamente guardado en disco.

Archivo → Guardar como. . . : Graba un archivo (.lgo) de procedimientos defi-


nidos hasta ese momento en el disco, permitiendo asignarle un nombre.

Archivo → Guardar: Graba un archivo (.lgo) con los procedimientos definidos


hasta ese momento en el disco. Esta opción estará deshabilitada mientras no se le
haya asignado un nombre como se acaba de explicar en el punto anterior.

10
3.1. MENÚ “ARCHIVO” 11

Archivo → Capturar imagen → Guardar imagen como. . . : Permite guardar


la imagen del área de dibujo en formato jpg o png. Si deseas seleccionar una parte
de la imagen, puedes definir una zona haciendo dos clicks sucesivos en las esquinas
diagonalmente opuestas de la zona que te interesa.

Archivo → Capturar imagen → Imprimir imagen: Permite imprimir la imagen


del área de dibujo. Se puede seleccionar una zona a imprimir tal como se explicó para
Guardar.

Archivo → Capturar imagen → Copiar al portapapeles: Permite enviar la


imagen al portapapeles del sistema. Del mismo modo que para Imprimir y Guar-
dar, se puede seleccionar una zona. Esta opción funciona perfectamente en entornos
Windows y Mac:

pero no ası́ en entornos Linux (el portapapeles no tiene el mismo funcionamiento).

Archivo → Zona de texto → Guardar en formato RTF: Guarda el contenido


del Histórico de Comandos en un fichero con formato RTF (Rich Text Format),
manteniendo los colores de los mensajes. Si no se escribe la extensión .rtf, se añade
automáticamente.

Archivo → Salir: Finaliza la ejecución de XLogo. También puede terminarse la


ejecución desde la Lı́nea de comandos con la primitiva adios.
12 CAPÍTULO 3. OPCIONES DEL MENÚ

3.2. Menú “Edición”


Edición → Copiar: copia el texto seleccionado en el portapapeles. Atajo de teclado:
Control+C

Edición → Cortar: corta el texto seleccionado y lo copia en el portapapeles. Atajo


de teclado: Control+X

Edición → Pegar: pega el texto desde el portapapeles a la lı́nea de comandos. Atajo


de teclado: Control+V

Edición → Seleccionar todo: Selecciona todo lo que se encuentra escrito en la


Lı́nea de Comandos.

3.3. Menú “Herramientas”


Herramientas → Elegir el color del lápiz: Permite elegir el color con que la
tortuga dibujará, desde la paleta de colores, mediante una definición HSB (Hue, Sa-
turation, Brightness - Tonalidad, Saturación, Brillo) o desde una codificación RVA
(Rojo, Verde y Azul).

También accesible con el comando poncolorlapiz. (Sección 5.1.2)

Herramientas → Elegir el color de fondo (papel): Pone un color como fondo


de pantalla, con las mismas caracterı́sticas que Elegir Color del Lápiz. También
accesible con el comando poncolorpapel. (Sección 5.1.2)

Herramientas → Definir archivos de inicio: Permite establecer la ruta a los


archivos de inicio.

Cualquier procedimiento contenido en estos archivos .lgo se convertirán en “seudo-


primitivas” del lenguaje XLogo. Pero no pueden ser modificadas por el usuario. Ası́
se pueden definir primitivas personalizadas .
3.3. MENÚ “HERRAMIENTAS” 13

Herramientas → Traducir procedimientos: Abre una caja de diálogo que per-


mite traducir los comandos XLogo entre dos idiomas. Es muy útil, en particular,
cuando se obtienen códigos Logo en inglés (de internet, por ejemplo) para expresar-
los en el idioma deseado (Español, Francés, . . . )

Herramientas → Borra procedimientos: Abre una caja de diálogo que permite


selccionar el procedimiento que se desea borrar, de una forma más sencilla que con
la primitiva borra.

Herramientas → Preferencias: Abre una caja de diálogo donde se pueden confi-


gurar varios aspectos:

• General:
◦ Idioma: Permite elegir entre Francés, Inglés, Español, Galés, Portugués,
Esperanto y Árabe. Nota que las primitivas se adecúan a cada lenguaje.
◦ Aspecto: Permite definir el aspecto de la ventana XLogo. Están disponi-
bles los estilos “Windows”, “Metal” y “Motif”.
◦ Velocidad de la tortuga: Si prefieres ver todos los movimientos de la
tortuga, puedes reducir la velocidad con la barra deslizante.

• Elección de la tortuga: Elige entre siete tortugas distintas. También accesible


con el comando ponforma (Sección 5.1.2)
• Opciones:
14 CAPÍTULO 3. OPCIONES DEL MENÚ

◦ Cuadrı́cula en el fondo: Establece (o elimina) una cuadrı́cula en el fondo


del Área de dibujo, ası́ como las medidas y el color de la misma. También
accesible con las primitivas cuadricula, detienecuadricula y poncolor-
cuadricula. (Sección 5.1.2)
◦ Ejes cartesianos: Muestra (o retira) los ejes cartesianos (X e Y) del Área
de dibujo, establece su escala (separación entre marcas) y su color. También
accesible con las primitivas ejes, detieneejes, ejex, ejey y poncolorejes
(Sección 5.1.2).
◦ Color de papel preasignado: Permite elegir el color por defecto del papel,
es decir, el mostrado al iniciar XLogo.
◦ Color de lápiz preasignado: Permite elegir el color por defecto del lápiz,
es decir, el utilizado al iniciar XLogo.
◦ Marco de adorno: Permite elegir qué marco de adorno se muestra alre-
dedor del Área de Dibujo, una imagen o un color sólido. Para no superar
la memoria asignada, la imagen no puede ocupar más de 100 kb.

◦ Número máximo de tortugas: Para el modo multitortuga (sección 8).


Por defecto 16.
◦ Tamaño máximo del lápiz: Puedes fijar un tamaño lı́mite para el lápiz.
3.3. MENÚ “HERRAMIENTAS” 15

Si no se va a utilizar esta limitación, introduce el número -1 en el recuadro


asociado.
◦ Forma del lápiz: Cuadrado o Redondo
◦ Tamaño de la ventana para dibujar: Puedes establecer un tamaño per-
sonalizado para el Área de Dibujo. Por defecto XLogo establece un área
de 1000 por 1000 pixels.
Atención: según aumenta el tamaño de la imagen, puede ser necesario
aumentar la memoria destinada a XLogo. Un mensaje de error advertirá
si ocurre esto.
◦ Calidad que se aplica al dibujo: Normal, Alto o Bajo. En calidad “Al-
ta”, no se aprecia ningún efecto en particular, pero puede producirse una
ralentización de la ejecución.
◦ Borrar pantalla al salir del editor: Sı́ o No
◦ Tamaño de la ventana para dibujar: Determina las dimensiones del
Área de dibujo.
◦ Memoria destinada a XLogo: (en Mb) Por defecto, el valor asignado
es 64 Mb. Puede ser necesario aumentarlo cuando el tamaño del Área de
Dibujo sea demasiado grande. La modificación de este parámetro sólo se
hará efectiva tras cerrar y reiniciar XLogo.
Atención: no aumentar en exceso y/o sin razón este valor, ya que puede
ralentizar considerablemente el sistema.

• Sonido: La lista de instrumentos que puede imitar la tarjeta de sonido a través


de la interfaz MIDI. Puedes seleccionar un instrumento concreto en cualquier
momento, mediante la primitiva poninstrumento n.
Si usas Windows, esta lista puede estar vacı́a. Esto se debe a que la versión
de Java para Windows no incluye los bancos de sonido, y deben instalarse
manualmente. Echa un vistazo a la sección 15.1.

• Fuente: Elige el tipo de letra y su tamaño


16 CAPÍTULO 3. OPCIONES DEL MENÚ

• Resaltado: Elige los colores que se utilizarán en el resaltado de primitivas,


palabras, variables números, paréntesis y corchetes.

3.4. Menú “Ayuda”


Ayuda → Licencia: Muestra la licencia original GPL (en Inglés) bajo la cual es
distribuido este programa.

Ayuda → Traducción de la Licencia: Refiere a una traducción al español de la


licencia GPL, sin efectos legales, sólo como referencia para entender la versión en
Inglés.
Ayuda → Traducir XLogo: Abre una ventana para añadir y/o corregir traduccio-
nes.

Desde ella pueden crearse y/o modificarse tanto las primitivas como los mensajes.
Una vez creados/modificados, haz click fuera de la celda que acabas de escribir y
pulsa el botón Si. Se abrirá una ventana donde debes elegir el fichero de texto donde
guardar los cambios y que debes enviar a loic@[Link]
3.4. MENÚ “AYUDA” 17

Ayuda → Acerca de. . . : Lo de siempre . . . y ¡¡[Link] para guardar


en favoritos!! o:)
Capı́tulo 4

Convenciones adoptadas para XLogo

Esta sección define aspectos claves acerca del lenguaje Logo en general, y sobre XLogo
en particular.

4.1. Comandos y su interpretación


El lenguaje Logo permite que ciertos eventos sean iniciados por comandos internos.
Estos comandos son llamados primitivas. Cada primitiva puede tener un cierto número
de parámetros que son llamados argumentos. Por ejemplo, la primitiva bp, que borra la
pantalla, no lleva argumentos, mientras que la primitiva suma tiene dos argumentos.

escribe suma 2 3 devuelve 5.

Los argumentos en Logo son de tres tipos:

Números: Algunas primitivas esperan números como su argumento: av 100 es un


ejemplo.

Palabras: Las palabras se escriben precedidas por ". Un ejemplo de una primitiva
que tiene una palabra como argumento es escribe.

escribe "hola devuelve hola

Nota que si olvidas el ", el intérprete devuelve un mensaje de error. En efecto, escribe
esperaba ese argumento, pero para el intérprete, hola no representa nada, ya que no
fue definido como número, ni palabra, ni lista, ni procedimiento.

Listas: Se definen encerrándolas entre corchetes.

Los números son tratados a veces como un valor (por ej: av 100), o bien como una palabra
(por ejemplo: escribe vacio? 12 devuelve falso).

Algunas primitivas tienen una forma general, esto es, pueden ser utilizadas con números
o argumentos opcionales. Estas primitivas son:
escribe suma producto o
y lista frase palabra
Para que el intérprete las considere en su forma general, tenemos que escribir las órdenes
entre paréntesis. Observa los ejemplos:

18
4.2. PROCEDIMIENTOS 19

escribe (suma 1 2 3 4 5)

devuelve:

15

También:

escribe (lista [a b] 1 [c d])

devuelve:

[a b] 1 [c d]

si (y 1=1 2=2 8=5+3) [avanza 100 giraderecha 90]

4.2. Procedimientos
Además de las primitivas, puedes definir tus propios comandos. Estos son llamados
procedimientos. Los procedimientos son iniciados por la palabra para y concluyen con la
palabra fin. También pueden crearse usando el editor interno de procedimientos XLogo.
Veamos un pequeño ejemplo:

para cuadrado
repite 4 [
avanza 100
giraderecha 90 ]
fin

El proceso para crear el procedimiento es el siguiente:

1. Escribir en la Lı́nea de Comando: para cuadrado y pulsar [Enter], escribir ed y


[Enter] o hacer click con el ratón en el botón Editar

2. Se mostrará la Ventana del Editor, donde completamos todo el procedimiento

3. Pulsar con el ratón, o hacer Alt+Q

4. En la ventana del Histórico de Comandos, debe aparecer el mensaje:


Acaba de definir cuadrado El intérprete XLogo no detecta los posibles errores
en este momento, sino cuando se utilice el procedimiento por primera vez.
20 CAPÍTULO 4. CONVENCIONES ADOPTADAS PARA XLOGO

5. Desde ese momento, puede invocarse la orden cuadrado en la Lı́nea de Comandos


Los procedimientos también pueden aprovechar las ventajas de los argumentos. Para hacer
esto, se usan variables. Una variable es una palabra (un nombre) al que se le puede asignar
un valor.
Ejemplo:

Probando el ejemplo:

dosveces [1 2 3]

devuelve

1 2 3
1 2 3

Al final del manual se incluyen varios ejemplos de procedimientos.

4.3. El caracter especial \


El caracter \ (barra invertida o backslash) permite que las “palabras” (sección 4.1)
contengan espacios o saltos de lı́nea.
\n produce un salto de lı́nea
\ produce un espacio entre palabras ( representa un espacio en blanco)

Ejemplos:
es "xlogo\ xlogo produce xlogo xlogo
es "xlogo\nxlogo produce xlogo
xlogo

Esto tiene implicaciones a la hora de obtener el caracter \ en la Lı́nea de Comandos:


se debe teclear \\. Todo caracter \ es ignorado. Este aviso es importante en particu-
lar para la gestión de archivos (sección 5.6). Para establecer como directorio de trabajo
c:\Mis Documentos se debe escribir:
pondirectorio "c:\\Mis\ Documentos
Nota el uso de \ para indicar el espacio entre Mis y Documentos. Si se omite el doble
backslash, la ruta definida serı́a interpretada como:
c:Mis Documentos
y el intérprete mostrará un mensaje de error.
4.4. MAYÚSCULAS Y MINÚSCULAS 21

4.4. Mayúsculas y minúsculas


XLogo no distingue entre mayúsculas y minúsculas en el caso de nombres de procedi-
mientos y primitivas. Ası́, en el procedimiento cuadrado como fue definido antes, si escribes
CUADRADO o cuAdRAdO, el intérprete de comandos interpretará y ejecutará correctamente
cuadrado. Por otro lado, XLogo sı́ respeta mayúsculas y minúsculas en listas y palabras:

escribe "Hola

proporciona

Hola

(la H inicial se mantuvo)

4.5. Operadores y sintaxis


Hay dos maneras para escribir ciertos comandos. Por ejemplo, para sumar 4 y 7, puedes
usar la primitiva suma que espera dos argumentos:

suma 4 7

o puedes usar el operador +:

4 + 7

Ambos tienen el mismo efecto. Esta tabla muestra la relación entre operadores y primitivas:

4.5.1. Operadores aritméticos


suma diferencia producto division
+ - * /

4.5.2. Operadores lógicos


o y iguales?
| & =

Los operadores | y & son especı́ficos de XLogo. No se encuentran en otras versiones


tradicionales de Logo. veamos algunos ejemplos de su uso:
escribe 3+4 = 7-1 devuelve falso
escribe 3=4 | 7=49/7 devuelve cierto
escribe 3=4 & 7=49/7 devuelve falso
Capı́tulo 5

Listado de primitivas

Como decı́amos, la tortuga se controla por medio de comandos internos llamados pri-
mitivas. Las siguientes secciones definen estas primitivas:

5.1. Movimientos de la tortuga; poner lápiz y colores


5.1.1. Movimientos
Esta primera tabla define las primitivas que gobiernan el movimiento de la tortuga, y
sólo necesitan un argumento:

Primitivas Argumentos Uso


n: número de Mueve la tortuga hacia adelante n pasos en la di-
avanza, av
pasos rección que actualmente está mirando.
n: número de Mueve la tortuga hacia atrás n pasos en la direc-
retrocede, re
pasos ción que actualmente está mirando.
giraderecha, Gira la tortuga n grados hacia la derecha de la
n: ángulo
gd dirección que actualmente está mirando.
giraizquierda, Gira la tortuga n grados hacia la izquierda de la
n: ángulo
gi dirección que actualmente está mirando.

En esta segunda tabla el movimiento se controla mediante coordenadas en la pantalla.


Para ver mejor dichas coordenadas, se dispone de las primitivas cuadricula, que muestra
una cuadrı́cula en pantalla de las dimensiones deseadas, y ejes, que muestra los ejes
cartesianos con las correspondientes etiquetas:

Primitivas Argumentos Uso


Dibuja una cuadrı́cula en el Área de dibujo
cuadricula a b: números
de dimensiones a x b y borra la pantalla
Quita la cuadrı́cula del Área de dibujo y borra
detienecuadricula no
la pantalla
poncolorcuadricula primitiva, Establece el color de la cuadrı́cula del Área de
pcc lista o numero dibujo
colorcuadricula no Devuelve el color actual de la cuadrı́cula.

22
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LÁPIZ Y COLORES 23

Primitivas Argumentos Uso


Dibuja los ejes cartesianos (X e Y) de escala
ejes a: número (separación entre marcas) a, con las etiquetas
correspondientes.
Dibuja el eje de abscisas (eje X) de escala (sepa-
ejex a: número ración entre marcas) a, con las etiquetas corres-
pondientes.
Dibuja el eje de ordenadas (eje Y) de escala
ejey a: número (separación entre marcas) a, con las etiquetas
correspondientes.
Quita los ejes del Área de dibujo y borra la
detieneejes a: número
pantalla
primitiva, Establece el color de los ejes en el Área de
poncolorejes pce
lista o numero dibujo
colorejes no Devuelve el color actual de los ejes.
Lleva la tortuga a la posición original, es decir
centro no
coordenadas [0 0] con rumbo 0.
Devuelve las coordenadas X e Y de la posición
posicion, pos no
actual de la tortuga.
[x y]: Mueve la tortuga a las coordenadas especifica-
ponposicion,
lista de dos das por los dos números en la lista (x es la abs-
ponpos
números cisa, y la ordenada).
Mueve la tortuga horizontalmente hasta el pun-
ponx x: eje x
to de abscisa x
Mueve la tortuga verticalmente hasta el punto
pony y: eje y
de ordenada y
x y: coordena- Idéntico a ponpos [x y] x e y son números, no
ponxy
das x e y una lista.
El punto definido por las coordenadas de la lista
punto a: lista
se resaltará con el color del lápiz.

Esta tercera tabla muestra las primitivas que controlan el rumbo, dirección en grados
respecto de la vartical y mirando hacia arriba:

Primitivas Argumentos Uso


rumbo no Devuelve el rumbo o el ángulo de la tortuga.
Orienta la tortuga en la dirección especificada. 0
ponrumbo, ponr n: rumbo
corresponde a mirar hacia arriba verticalmente.
La lista debe contener dos números que represen-
ten coordenadas. Devuelve el rumbo que la tortuga
hacia a: lista
deberá seguir hacia el punto definido por las coor-
denadas.
La lista debe contener dos números que represen-
ten coordenadas. Devuelve el número de pasos des-
distancia a: lista
de la actual posición y el punto definido por las
coordenadas.
24 CAPÍTULO 5. LISTADO DE PRIMITIVAS

5.1.2. Propiedades
Esta tabla descrine las primitivas que permiten ajustar las propiedades de la tortuga.
Por ejemplo, ¿estará visible en la pantalla? ¿Con qué color dibujará cuando se mueva?

Primitivas Argumentos Uso


muestratortuga,
no Hace que la tortuga se vea en pantalla.
mt
ocultatortuga,
no Hace invisible a la tortuga.
ot
bajalapiz, bl no La tortuga dibujará una lı́nea cuando se mueva.
subelapiz, sl no La tortuga no dibujará cuando se mueva.
goma, go no La tortuga borrará toda traza que encuentre.
inviertelapiz,
no Pone la tortuga en “modo inverso”, y lápiz abajo.
ila
Pone la tortuga en el modo normal de dibujo y
ponlapiz, pla no
lápiz abajo.
a: número,
poncolorlapiz, Cambia el color del lápiz. La especificación del
primitiva o
poncl color se detalla en la sección 5.1.3
lista [r v a]
Define el grosor del trazo del lápiz (en pixels). Por
pongrosor n: número
defecto es 1. La forma es cuadrada.
colorlapiz, cl a: lista Devuelve el color actual del lápiz.
encuentracolor, Devuelve el color del punto definido por las coor-
a: lista
ec denadas.
grosorlapiz,
no Devuelve el grosor del lápiz.
gl
ponformalapiz, Fija la forma del lápiz: pfl 0: cuadrada; pfl 1:
n: 0 ó 1
pfl ovalada.
formalapiz, fl no Devuelve la forma del lápiz.
Puedes elegir tu tortuga preferida en la segunda
etiqueta del menú Herramientas → Preferen-
ponforma,
n: número cias, pero también es posible con ponforma. El nú-
pforma
mero n puede ir de 0 a 6. (0 es la forma triangular
del Logo tradicional).
Devuelve un número que representa la forma ac-
forma no
tual de la tortuga.

El control del Área de dibujo se realiza con las primitivas siguientes:

Primitivas Argumentos Uso


a: número,
poncolorpapel, Cambia el color del papel (fondo). La especifi-
primitiva o
poncp cación del color se detalla en la sección 5.1.3
lista [r v a]
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LÁPIZ Y COLORES 25

Primitivas Argumentos Uso


Devuelve el color actual del “papel” (fondo, área
colorpapel a: lista
de dibujo).
poncalidaddibujo, Fija la calidad del dibujo: pcd 0: normal; pcd
n: 0, 1 ó 2
pcd 1: alta; pcd 2: baja;
calidaddibujo,
no Devuelve la calidad del dibujo
cdib
tama~
nopantalla, Devuelve una lista que contiene el tamaño de la
no
tpant pantalla
pontama~
nopantalla Fija el tamaño de la pantalla. Ejemplo: ptp
a: lista
ptp [1000 1000]
La tortuga puede salir del área de dibujo (pero
modoventana no
no dibujará nada).
Si la tortuga sale del área de dibujo, vuelve a
modovuelta no
aparecer en el lado opuesto
La tortuga queda confinada al área de dibujo.
Si intenta salir, aparecerá un mensaje de error
modojaula no
avisando cuántos pasos faltan para el punto de
salida.
Devuelve una lista con cuatro elementos, las
coordenadas de la esquina superior izquierda y
tama~
noventana, de la esquina inferior derecha.
tv, no Por ejemplo, si devuelve [-200 200 400
esquinasventana -300], significa que las coordenadas de la es-
quina superior izquierda son (-200,200) y las
de la esquina inferior derecha (400,-300)
Acerca o aleja el Área de dibujo. En concreto,
el valor de a es el factor de escala respecto a la
zoom a: número
imagen original: (a>1) acerca el Área de dibujo;
(0<a<1) aleja el Área de dibujo.
borrapantalla, bp Vacı́a el área de dibujo, situando a la tortuga
no
en el centro de la pantalla.
Vacı́a el área de dibujo, dejando a la tortuga en
limpia no
el lugar donde estaba tras la ejecución anterior.

Finalmente, las primitivas que controlan la escritura en pantalla, los mensajes al usuario
y simplifican determinados dibujos:

Primitivas Argumentos Uso


a: palabra o Dibuja la palabra o lista especificada, en la posi-
rotula
lista ción actual, y en la dirección que está mirando.
Devuelve, en pı́xels, la longitud que tendrá en pan-
largoetiqueta a: lista
talla la lista.
Cuando se escribe con la primitiva rotula, mo-
ponfuente, pf n: número difica el tamaño de la tipografı́a. Por defecto, el
tamaño es 12.
26 CAPÍTULO 5. LISTADO DE PRIMITIVAS

Primitivas Argumentos Uso


Devuelve el tamaño de la tipografı́a cuando se es-
fuente no
cribe en pantalla con la primitiva rotula.
Muestra una caja de diálogo con el mensaje que
mensaje, msj a: lista está en la lista. El programa se detiene hasta que
el usuario hace un click en el botón “Aceptar”
Dibuja una circunferencia de radio n alrededor de
circulo n: radio
la tortuga
Dibuja un arco de circunferencia de radio n alrede-
n: radio
arco dor de la tortuga, comprendido entre los ángulos a
a b: ángulos
y b, midiendo desde el rumbo de la tortuga.

La primitiva largoetiqueta permite saber si al escribir en pantalla con rotula tienes


suficiente espacio.

Ejemplo:
largoetiqueta [Hola, ¿cómo estás?] devuelve, en pı́xels la longitud en pan-
talla de la frase Hola, ¿cómo estás?

5.1.3. Acerca de los colores


El color en XLogo está especificado por una lista de tres números [r v a] compren-
didos entre 0 y 255. El número r es el componente rojo, v el verde y a el azul ([r g b]
en inglés). XLogo tiene 17 colores predefinidos, a los que se puede referir con un número,
con su lista [r v a] o con una primitiva. Las primitivas correspondientes son:

Número Primitiva [R V A] Color


0 negro [0 0 0]

1 rojo [255 0 0]

2 verde [0 255 0]

3 amarillo [255 255 0]

4 azul [0 0 255]

5 magenta [255 0 255]

6 cyan [0 255 255]

7 blanco [255 255 255]

8 gris [128 128 128]

9 grisclaro [192 192 192]

10 rojooscuro [128 0 0]
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LÁPIZ Y COLORES 27

Número Primitiva [R V A] Color


11 verdeoscuro [0 128 0]

12 azuloscuro [0 0 128]

13 naranja [255 200 0]

14 rosa [255 175 175]

15 violeta [128 0 255]

16 marron [153 102 0]

Ejemplo: Estas tres órdenes son la misma:

poncolorlapiz naranja
poncolorlapiz 13
poncolorlapiz [255 200 0]

Veremos un ejemplo de su uso en la sección 13.7

5.1.4. Animación
Existen dos primitivas llamadas animacion y refrescar que permiten escribir órdenes
sin que la tortuga las realice.

Primitivas Uso
animacion Se accede al modo de animación.
Detiene el modo animación, retornando al modo
detieneanimacion
normal.
En modo de animación, ejecuta las órdenes y ac-
refrescar
tualiza la imagen

Mientras se escriben las órdenes en el modo de animación (una cámara de cine aparece
a la izquierda del Histórico de Comandos), éstas no son ejecutadas en el Área de
Dibujo sino que son almacenadas en memoria hasta que se introduce la orden refrescar.

Haciendo click en este icono, se detiene el modo de animación, sin necesidad de usar la
primitiva detieneanimacion.
Esto es muy útil para crear animaciones o conseguir que los dibujos se realicen rápida-
mente.
28 CAPÍTULO 5. LISTADO DE PRIMITIVAS

5.1.5. Propiedades del Histórico de Comandos


Esta tercera tabla define las primitivas que permiten ajustar las propiedades de texto
del área del histórico de comandos. Aquellas primitivas que controlan el color y tamaño de
este área, sólo están disponibles para ser usadas por las primitivas escribe y tipea.

Primitivas Argumentos Uso


Borra el Área de comandos, y el área del His-
borratexto, bt no
tórico de comandos.
a: número,
Muestra en el Histórico de Comandos el argu-
escribe, es palabra o
mento indicado, a.
lista
a: número,
Idéntico a escribe, pero el cursor queda en la linea
tipea palabra o
donde se mostró el contenido del argmento.
lista
Define el tamaño de la tipografı́a del área del His-
ponfuentetexto,
n: número tórico de comandos. Sólo disponible para ser
pft
usada por la primitiva escribe.
fuentetexto, Devuelve el tamaño de la tipografı́a usada por la
no
ftexto primitiva escribe.
Define el color de la tipografı́a del área del Histó-
poncolortexto, a: número o
rico de comandos. Sólo disponible para ser usada
pctexto lista
por la primitiva escribe.
Devuelve el color de la tipografı́a usada por la
colortexto no primitiva escribe en el área del Histórico de
comandos.
Selecciona la tipografı́a número n para escribir en
el área del Histórico de comandos con la primi-
ponnombrefuentetexto,
n: número tiva escribe. Puedes encontrar la relación entre
pnft
fuente y número en el menú Herramientas →
Preferencias → Fuente.
Devuelve una lista con dos elementos. El primero
es un número correspondiente a la fuente utilizada
nombrefuentetexto,
no para escribir en el área del Histórico de coman-
nft
dos con la primitiva escribe. El segundo elemento
es una lista que contiene el nombre de la fuente.
Define los efectos de fuente para los comandos en el
Histórico de comandos. Puedes elegir entre sie-
lista o te estilos: ninguno, negrita, italica, tachado,
ponestilo, pest
palabra subrayado, superindice y subindice. Si quieres
aplicar varios estilos a la vez, escrı́belos en una lis-
ta. Mira los ejemplos al final de la tabla.
Devuelve una lista que contiene todos los efectos
estilo, no de fuente utilizados por las primitivas escribe y
tipea.
5.2. OPERACIONES ARITMÉTICAS Y LÓGICAS 29

Primitivas Argumentos Uso


Determina la proporción de pantalla ocupada por
n: número el Área de Dibujo y el Histórico de Coman-
ponseparacion,
comprendido dos. Si n vale 1, el Área de Dibujo ocupará toda
ponsep
entre 0 y 1 la pantalla. Si n vale 0, será el Histórico quien la
ocupe.
Devuelve el valor de la proporción de pantalla ocu-
separacion2 no pada por el Área de Dibujo y el Histórico de
Comandos.

Ejemplos de estilos de fuente:

ponestilo [negrita subrayado] escribe "Hola


Devuelve:
Hola

pest "tachado tipea [Tachado] pest "italica tipea "\ x


pest "superindice escribe 2
Devuelve:
Tachado x2

5.2. Operaciones aritméticas y lógicas


Esta es la lista de los operadores lógicos :

Primitivas Argumentos Uso


Devuelve cierto si a ó b son ciertos, si no, devuel-
o a b: booleanos
ve falso
Devuelve cierto si a y b son ciertos, si no, devuel-
y a b: booleanos
ve falso
Devuelve la negación de a. Si a es cierto, devuelve
no a: booleano
falso. Si a es falso, devuelve cierto.

Esta es la lista de los comandos relacionados con números:

Primitivas Argumentos Uso


a b:
suma, + números a Devuelve el resultado de sumar a y b.
sumar
a b:
diferencia, - números a Devuelve el resultado de restar b de a.
restar
30 CAPÍTULO 5. LISTADO DE PRIMITIVAS

Primitivas Argumentos Uso


cambiasigno,
a: número Devuelve el opuesto de a.
cs
a b:
producto, * Devuelve el resultado de multiplicar a por b
números
a b:
division, div,/ Devuelve el resultado de dividir a por b
números
a b:
Devuelve el resultado de la dividisión entera de a
cociente números
entre b
enteros
a b:
resto números Devuelve el resto de la división de a por b
enteros
redondea a: número Devuelve el entero más próximo al número a
Devuelve el entero inmediatamente anterior al nú-
truncar a: número
mero a
a b:
potencia Devuelve a elevado a la potencia b
números
raizcuadrada,
a: número Devuelve la raiz cuadrada de a.
rc
log10, log a: número Devuelve el logaritmo decimal de a.
a: número
seno, sen Devuelve el seno del número a.
en grados
a: número
coseno, cos Devuelve el coseno del número a.
en grados
a: número
tangente, tan Devuelve la tangente del número a.
en grados
arcocoseno,
a: número Devuelve el ángulo, en grados, cuyo coseno vale a.
acos
arcoseno, asen a: número Devuelve el ángulo, en grados, cuyo seno vale a.
arcotangente, Devuelve el ángulo, en grados, cuya tangente vale
a: número
atan a.
pi no Devuelve el número π (3.141592653589793)
a: número Devuelve un número al azar mayor o igual que 0 y
azar
entero menor que a.
Devuelve el valor absoluto (distinto de cero) del
absoluto, abs a: número
número a

Ejemplos:

suma 40 60 devuelve 100


diferencia 100 60 devuelve 40
cambiasigno 5 devuelve -5
cambiasigno -285 devuelve 285
division 3 6 devuelve 0.5
cociente 3 6 devuelve 0
redondea 6.4 devuelve 6
potencia 3 2 devuelve 9
5.3. OPERACIONES CON LISTAS 31

Importante: Ten cuidado con las primitivas que requieren dos parámetros,
como ponxy a b. Si b es negativo, por ejemplo,
ponxy 200 -10
El intérprete XLogo realizará la operación 200 - 10 (o sea, le restará 10 a
200). Y determinará que hay un solo parámetro (190) cuando esperaba dos, y
entonces generará un mensaje de error. Para evitar este tipo de problemas, se
usa la primitiva “cambiasigno” para especificar un número negativo:
ponxy 200 cambiasigno 10
aunque también es válido:
ponxy 200 (-10)
Como sabemos, la presencia de paréntesis modifica el orden en que se deben reali-
zar las operaciones. XLogo realiza las operaciones (como no podı́a ser de otra manera)
obedeciendo a la prioridad de las mismas. Ası́ si escribimos:
escribe 3 + 2 * 4
XLogo efectúa primero el producto y luego la suma, siendo el resultado 11.
Sin embargo, si escribimos:
escribe (3 + 2) * 4
XLogo efectuará la suma antes que el producto, y el resultado será 20.

Hay que tener cuidado, y esto es muy importante, si se usan las primitivas suma,
diferencia, producto, division, potencia, . . . Por ejemplo, si queremos efectuar la
operación 35 + 2 * 4 - 7, podrı́amos escribir:
escribe potencia 3 5 + 2 * 4 - 7
pero observamos que XLogo devuelve:
729
¿Cómo es posible? potencia espera dos parámetros, la base y el exponente, ası́ que interpre-
ta que 3 es la base y el resto es el exponente, ası́ que efectúa la operación 5 + 2 * 4 - 7,
y toma el resultado como exponente; es decir:
potencia 3 5 + 2 * 4 - 7 = 35 + 2 * 4 - 7
= 36 = 729
Para que realmente se efectúe 35 + 2 * 4 - 7, debemos escribir:
(potencia 3 5) + 2 * 4 - 7
o bien:
diferencia suma potencia 3 5 producto 2 4 7
que se entiende mejor usando paréntesis:
diferencia (suma (potencia 3 5) (producto 2 4) ) 7
En este caso, hemos usado los paréntesis para hacer más legible el programa. Nunca
olvides que un programa debe ser entendible por otra persona.

5.3. Operaciones con listas


32 CAPÍTULO 5. LISTADO DE PRIMITIVAS

Primitivas Argumentos Uso


palabra a b: palabras Concatena las dos palabras a y b.
lista a b Devuelve una lista compuesta de a y b.
Devuelve una lista compuesta de a y b. Si a o b son
una lista, entonces cada uno de los componentes de
frase, fr a b
a y b se convierten en elementos de la lista creada.
(los corchetes son suprimidos).
a b: a cualquiera,
ponprimero, pp Inserta a en la primera posición de la lista b.
b lista
a b: a cualquiera,
ponultimo, pu Inserta a en la última posición de la lista b
b lista
invierte a: lista Invierte el orden de los elementos de la lista a
Si a es una palabra, devuelve una de las letras de
elige a: palabra o lista a al azar. Si a es una lista, devuelve uno de los
elementos de a al azar.
a b: a cualquiera, Elimina el elemento a de la lista b, si aparece den-
quita
b lista tro.
Si b es una palabra, devuelve la letra a de la pa-
a b: a número entero,
elemento labra (1 señala la primera letra). Si b es una lista,
b lista o palabra
devuelve el elemento número a de la lista.
Si a es una lista, devuelve toda la lista menos el
menosultimo,
a: palabra o lista último elemento. Si a es una palabra, devuelve la
mu
palabra sin la última letra.
Si a es una lista, devuelve toda la lista menos el
menosprimero,
a: palabra o lista primer elemento. Si a es una palabra, devuelve la
mp
palabra sin la primera letra.
Si a es una lista, devuelve el elemento de la lista.
ultimo a: palabra o lista Si a es una palabra, devuelve la última letra de la
palabra.
Si a es una lista, devuelve el primer elemento de
primero, pr a: palabra o lista la lista. Si a es una palabra, devuelve la primera
letra de la palabra.
miembro a b Investiga a en b
Dada la lista l1, inserta en la posicion número n
l1: lista
la palabra o lista l2.
agrega n: número
Ejemplo: agrega [a b c] 2 8 proporciona
l2: palabra o lista
[a 8 b c]
Dada la lista l1, reemplaza el elemento n por la
l1: lista
palabra o lista l2.
reemplaza n: número
Ejemplo: reemplaza [a b c] 2 8 proporciona
l2: palabra o lista
[a 8 c]
Si a es una palabra, devuelve el número de letras
cuenta a: palabra o lista de a. Si a es una lista, devuelve el número de ele-
mentos de a.

Para la primitiva miembro:


Si b es una lista, investiga dentro de esta lista; hay dos casos posibles:
5.4. BOOLEANOS 33

• Si a está incluido en b, devuelve la sub-lista generada a partir de la primera


aparición de a en b.
• Si a no está incluido en b, devuelve la palabra falso.

Si b es una palabra, investiga los caracteres a dentro de b. Dos casos son posibles:

• Si a está incluido en b, devuelve el resto de la palabra a partir de a.


• Si no, devuelve la palabra falso.

Ejemplos:

palabra "a 1 devuelve a1


lista 3 6 devuelve [3 6]
lista "otra "lista devuelve [otra lista]
fr [4 3] "hola devuelve [4 3 hola]
fr [dime como] "vas devuelve [dime como vas]
ponprimero "cucu [2] devuelve [cucu2]
ponultimo 5 [7 9 5] devuelve [7 9 5 5]
invierte [1 2 3] devuelve [3 2 1]
quita 2 [1 2 3 4 2 6] devuelve [1 3 4 6]
miembro "u "cucu devuelve ucu
miembro 3 [1 2 3 4] devuelve [3 4]

5.4. Booleanos
Puede ser cierto o falso. Un booleano es la respuesta a las primitivas terminadas con ?

Primitivas Argumentos Uso


cierto cualquiera Devuelve "cierto
falso cualquiera Devuelve "falso
palabra? a Devuelve cierto si a es una palabra, falso si no.
numero? a Devuelve cierto si a es un número, falso si no.
Devuelve cierto si a es un número entero, falso
entero? a: número
si no.
lista? a Devuelve cierto si a es una lista, falso si no.
Devuelve cierto si a es una lista vacı́a o una pa-
vacio? a
labra vacı́a, falso si no.
iguales? a b Devuelve cierto si a y b son iguales, falso si no.
antes?, Devuelve cierto si a está antes que b siguiendo el
a b: palabras
anterior? orden alfabético, falso si no.
Si b es una lista, determina si a es un elemento de
miembro? a b b. Si b es una palabra, determina si a es un caracter
de b.
bajalapiz?, Devuelve la palabra cierto si el lápiz está abajo,
cualquiera
bl? falso si no.
Devuelve la palabra cierto si la tortuga está visi-
visible? cualquiera
ble, falso si no.
34 CAPÍTULO 5. LISTADO DE PRIMITIVAS

Primitivas Argumentos Uso


primitiva?, Devuelve cierto si la palabra es una primitiva de
a: palabra
prim? XLogo, falso si no.
procedimiento?, Devuelve cierto si la palabra es un procedimiento
a: palabra
proc? definido por el usuario, falso si no.
variable?, Devuelve cierto si la palabra es una variable de-
a: palabra
var? finida por el usuario, falso si no.
Devuelve cierto si la cuadrı́cula está activa,
cuadricula? no
falso si no.
Devuelve cierto si está activo el eje de abscisas
ejex?, no
(eje X), falso si no.
Devuelve cierto si está activo el eje de ordenadas
ejey?, no
(eje Y), falso si no.

5.5. Trabajando con procedimientos y variables


5.5.1. Acerca de los procedimientos
5.5.2. Procedimientos
Un procedimento es una especie de programa que, al ser llamado, ejecuta las instruc-
ciones que contiene. Los procedimientos empiezan por la orden para y terminan con fin.

para nombre_de_procedimiento :var1 :var2 ... [:varA :varB ...]


Cuerpo del procedimiento
fin
donde:
nombre_de_procedimiento es el nombre dado al procedimiento

:var1 :var2 ... son las variables locales usadas por el procedimiento

:varA :varB ... son las variables opcionales que podemos añadir al procedimento
(ver sección 5.5.4)

Cuerpo del procedimiento representa el conjunto de órdenes que conforman el pro-


cedimiento
Veamos un pequeño ejemplo:
para cuadrado
repite 4 [
avanza 100
giraderecha 90 ]
fin
El procedimiento se llama cuadrado, y no admite nigún argumento.
Se pueden agregar comentarios, precediéndolos del signo #. En el ejemplo anterior:
5.5. TRABAJANDO CON PROCEDIMIENTOS Y VARIABLES 35

para pentalfa
# Este procedimiento permite dibujar
# una estrella de cinco puntas
repite 5 [
avanza 200 giraderecha 144 ]
fin

5.5.3. Variables fijas


Una variable es una palabra (un nombre) a la que se le puede asignar un valor. En el
ejemplo anterior podemos incluir una variable:

para cuadrado :lado


repite 4 [
avanza :lado
giraderecha 90 ]
fin

El procedimiento se llama cuadrado, y admite una variable lado, de modo que ejecutando

cuadrado 200

la tortuga dibujará un cuadrado de lado 200 pasos. Al final del manual se incluyen varios
ejemplos de procedimientos.

5.5.4. Variables opcionales


En un procedimiento pueden usarse variables opcionales, es decir, variables cuyo valor
puede ser dado por el usuario y, si no lo hace, disponer de un valor por defecto.

para poligono :vertices [:lado 100]


repite :vertices [
avanza :lado
giraderecha 360/:vertices ]
fin

El procedimiento se llama poligono, lee una variable forzosa vertices que debe ser in-
troducida por el usuario, y otra variable opcional lado, cuyo valor es 100 si el usuario no
introduce ningún valor. De este modo que ejecutando

poligono 8

Durante la ejecución, la variable :lado se sutituye por su valor por defecto, esto es, 100,
y XLogo dibuja un octógono de lado 100.
Sin embargo, ejecuando

(poligono 8 300)

XLogo dibuja un octógono de lado 300. Es importante fijarse en que ahora la ejecución
se realiza encerrando las órdenes entre paréntesis. Esto indica al intérprete que se van a
usar variables opcionales.
36 CAPÍTULO 5. LISTADO DE PRIMITIVAS

5.5.5. Conceptos acerca de variables


Hay dos tipos de variables:

Variables globales: están siempre accesibles desde cualquier parte del programa.

Variables locales: sólo son accesibles dentro del procedimiento donde fueron defi-
nidas.

En esta implementación del lenguaje Logo, las variables locales no son accesibles desde
un sub–procedimiento. Al finalizar el procedimiento, las variables locales son eliminadas.

Primitivas Argumentos Uso


Si la variable local a existe, se le asigna el valor b.
a b: a palabra,
haz Si no, será la variable global a la asignada con el
b cualquiera
valor b.
Crea una variable llamada a. Atención: la variable
local a: palabra no es inicializada. Para asignarle un valor, hay que
usar haz.
a b: a palabra, Crea una nueva variable llamada a y le asigna el
hazlocal
b cualquiera valor b.
Define un nuevo procedimiento llamado palabra1,
palabra1
define, def provisto de las variables contenidas en lista2 y las
lista2 lista3
instrucciones a ejecutar contenidas en lista3.
borra, bo a: palabra Elimina el procedimiento cuyo nombre es a.
Reenvı́a el valor de a. cosa "a y :a son notaciones
cosa, objeto a: palabra
equivalentes
borravariable,
a: palabra Elimina la variable a.
bov
Elimina todas las variables y procedimientos ac-
borratodo, no
tuales.
imts,
Enumera todos los procedimientos actualmente de-
listaprocs no
finidos.
imvars,
listavars no Enumera todas las variables actualmente definidas.

Ejecuta la lista de instrucciones contenida en la


ejecuta a: lista
lista.

Ejemplos:
haz "a 100 asigna 100 a la variable a

define "poligono [nlados largo]


[ repite :nlados
[ avanza :largo giraderecha 360/:nlados ] ]
5.6. MANEJO DE ARCHIVOS 37

Esto define un procedimiento llamado poligono con dos variables (:nlados y


:largo), y permite trazar un polı́gono regular donde nlados es el número de
lados, y largo su tamaño.

5.5.6. La primitiva trazado


Para seguir el desarrollo de un programa, es posible conocer los procedimientos que se
están ejecutando en cada momento. Igualmente, también se puede determinar si los pro-
cedimientos están recibiendo correctamente los argumentos usando la primitiva devuelve.

La primitiva trazado activa el modo trazado:

trazado

mientras que para desactivarla:

detienetrazado

Un ejemplo puede verse en el cálculo del factorial (ejemplo 13.3).

trazado
escribe fac 4
fac 4
fac 4
fac 3
fac 2
fac 1
fac devuelve 1
fac devuelve 2
fac devuelve 6
fac devuelve 24
24

5.6. Manejo de archivos

Primitivas Argumentos Uso


Lista el contenido del directorio actual. (Equiva-
catalogo, cat no
lente al comando ls de Linux, dir de DOS)
Especifica el directorio actual. La ruta debe ser
pondirectorio,
l: lista absoluta. El directorio debe especificarse dentro de
pondir
una lista, y la ruta no debe contener espacios.
Cambia el directorio de trabajo desde el directo-
cambiadirectorio,a: palabra o
rio actual (ruta relativa). Puede utilizarse .. para
cd lista
referirse a la ruta del directorio superior.
Da el directorio actual. Por defecto, es
directorio,
no /home/tu_nombre en Linux, C:\WINDOWS en
dir
Windows.
a: palabra, Guarda en el archivo a los procedimientos especi-
guarda
l: lista ficados en l, en el directorio actual. (Ver ejemplo)
38 CAPÍTULO 5. LISTADO DE PRIMITIVAS

Primitivas Argumentos Uso


Guarda en el archivo a todos los procedimientos
guardatodo a: palabra
definidos, en el directorio actual. (Ver ejemplo)
carga a: palabra Abre y lee el archivo a.
Para poder leer o escribir en un fichero, es ne-
cesario crear un flujo hacia él. El argumento
n: número,
abreflujo nombre_fichero debe ser su nombre, que se re-
a: nombre_fichero
fiere al directorio de trabajo. El argumento n es el
número que identifica a ese flujo.
Carga una lista con los flujos abiertos indicando su
listaflujos l: lista
identificador
Abre el flujo cuyo identificador es n, y lee una lı́nea
leelineaflujo n: número
del fichero
Abre el flujo cuyo identificador es n, después lee
un caracter del fichero. Esta primitiva devuelve el
leecarflujo n: número
número correspondiente al caracter unicode (como
leecar - sec. 10.1)
Escribe la lı́nea de texto indicada en l al princi-
n: número, pio del fichero indicado por el flujo n. Atención: la
escribelineaflujo
l: lista escritura no se hace efectiva hasta que se ciera el
fichero con cierraflujo.
Escribe la lı́nea de texto indicada en l al final del
n: número, fichero indicado por el flujo n. Atención: la escritu-
agregalineaflujo
l: lista ra no se hace efectiva hasta que se ciera el fichero
con cierraflujo.
cierraflujo n: número Cierra el flujo n.
Devuelve cierto si se ha llegado al final del fichero,
finflujo? n: número
y falso en caso contrario.
cargaimagen, Carga el archivo de imagen indicado por la pala-
a: palabra
ci bra.

En la primitiva cargaimagen, se debe tener en cuenta que la esquina superior izquierda


se ubica en la posición actual de la tortuga. Los únicos formatos soportados son jpg y png.
La ruta debe especificarse previamente con pondirectorio y debe ser absoluta, empezando
en el nivel superior del árbol de directorios. Ejemplo:

pondirectorio [/home/alumnos/mis\ imagenes]


cargaimagen "[Link]

Ejemplos:

guarda "[Link] [proc1 proc2 proc3] guarda en el directorio ac-


tual un archivo llamado [Link] que contiene los procedimientos
proc1, proc2 y proc3.
guardatodo "[Link] guarda en el directorio actual un archivo lla-
mado [Link] que contiene la totalidad de los procedimientos actual-
mente definidos.
5.6. MANEJO DE ARCHIVOS 39

En ambos casos, si no se indica la extensión .lgo, será añadida. La palabra


especifica una ruta relativa a partir del directorio corriente. No funciona colocar
una ruta absoluta.
Para borrar todos los procedimientos definidos y cargar el archivo [Link],
debes usar:

borratodo carga "[Link]

La palabra especifica una ruta relativa a partir del directorio corriente. No fun-
ciona colocar una ruta absoluta.

Ejemplo 2:
El objetivo es crear el fichero ejemplo en el directorio personal: /home/tu_nombre,
en Linux, C:\, en windows que contiene:
~NOPQRSTUVWXYZ
ABCDEFGHIJKLMN
abcdefghijklm~
nnopqrstuvwxyz
0123456789
Para ello:
# abre un flujo hacia el fichero indicado
# identificara el flujo con el numero 2
pondirectorio "/home/tu_nombre
abreflujo 2 "ejemplo
# escribe las lineas que quiero
escribelineaflujo 2 [ABCDEFGHIJKLMN~
NOPQRSTUVWXYZ]
escribelineaflujo 2 [abcdefghijklmn~
nopqrstuvwxyz]
escribelineaflujo 2 [0123456789]
# cerramos el flujo para acabar la escritura
cierraflujo 2
Ahora, comprobamos que está bien escrito:

# abre un flujo hacia el fichero indicado


# identificara el flujo con el numero 0
pondirectorio "/home/tu_nombre
abreflujo 0 "ejemplo
# lee las lineas del fichero consecutivamente
escribe leelineaflujo 0
escribe leelineaflujo 0
escribe leelineaflujo 0
# cerramos el flujo
cierraflujo 0

Si queremos que nuestro fichero termine con la lı́nea Formidable!:

pondirectorio "c:\\
abreflujo 1 "ejemplo
agregalineaflujo 1 [Formidable!]
cierraflujo 1
40 CAPÍTULO 5. LISTADO DE PRIMITIVAS

5.7. Función avanzada de relleno


Las primitivas rellena y rellenazona permiten pintar una figura. Se pueden com-
parar a la función “rellena” disponible en la mayorı́a de los programas de dibujo. Esta
funcionalidad se extiende hasta los márgenes del área de dibujo. Hay tres reglas a tener en
cuenta para usar correctamente estas primitivas:

1. El lápiz debe estar bajo (bl).

2. La tortuga no debe estar sobre un punto del mismo color que se usará para rellenar.
(Si quieres pintar rojo, la tortuga no puede estar sobre un punto rojo).

3. Observar si cuadricula está o no activada.

Veamos un ejemplo para explicar la diferencia entre estas dos primitivas:


Los pı́xeles por donde pasa la tortuga son, en este momento, blancos. La primitiva
rellena va a colorear todos los pı́xeles blancos vecinos con el color elegido para el lápiz
hasta llegar a una frontera de cualquier color (incluida la cuadrı́cula):

poncolorlapiz 1
rellena

produce:

es decir, ha coloreado de rojo la región cerrada en la que se encuentra la tortuga.

Sin embargo, si hacemos:

poncolorlapiz 0
rellenazona

se obtiene:
5.7. FUNCIÓN AVANZADA DE RELLENO 41

es decir, rellena todos los pı́xeles vecinos hasta encontrar una “frontera” del color activo.

Este es un buen ejemplo para usar la primitiva rellena:


para mediocirc :c
# dibuja un semicirculo de diametro :c
repite 180 [
avanza :c * tan 0.5
giraderecha 1 ]
avanza :c * tan 0.5
giraderecha 90 avanza :c
fin

para arcohueco :c
# Utiliza el procedimiento mediocirc para dibujar un arcoiris sin colores
si :c < 100 [alto]
mediocirc :c
giraderecha 180 avanza 20 giraizquierda 90
arcohueco :c - 40
fin

para arcoiris
borrapantalla ocultatortuga arcohueco 400
subelapiz giraderecha 90 retrocede 150
giraizquierda 90 avanza 20 bajalapiz
repitepara [color 0 6]
[ poncolorlapiz (6-:color) rellena
subelapiz giraderecha 90 avanza 20 giraizquierda 90 bajalapiz ]
fin

o bien, más realista:


42 CAPÍTULO 5. LISTADO DE PRIMITIVAS

para arcoiris2
borrapantalla ocultatortuga arcohueco 400
subelapiz giraderecha 90 retrocede 150
giraizquierda 90 avanza 20 bajalapiz
haz "color [ [255 0 0] [255 160 0] [255 255 0] [0 255 0] [0 0 255]
[75 0 130] [128 0 255] ]
repitepara [colores 1 7]
[ poncolorlapiz elemento :colores :color rellena
subelapiz giraderecha 90 avanza 20 giraizquierda 90 bajalapiz ]
fin

5.8. Comandos de ruptura de secuencia


XLogo tiene tres comandos de ruptura de secuencia: alto, detienetodo y devuelve.

alto puede tener dos resultados:

• Si está incluı́do en un bucle repite o mientras, el programa sale del bucle


inmediatamente.
• Si está en un procedimiento, este es terminado.

detienetodo interrumpe total y definitivamente todos los procedimientos en ejecu-


ción

devuelve (dev) permite salir de un procedimiento “llevándose” un resultado.

Al final del manual hay numerosos ejemplos con el uso de estas primitivas.
Capı́tulo 6

Condicionales

La primitiva que define el condicional en XLogo es si. Su uso es simple:

si expresion_logica [comandos]

que ejecuta comandos únicamente cuando expresion_logica sea cierto, o bien:

si expresion_logica [comandos1] [comandos2]

donde comandos1 y comandos2 son, respectivamente, las órdenes a ejecutar en los casos en
los que expresion_logica sea cierto o falso.

Ejemplos:

Procedimiento que compara un número dado con 4 y contesta MAYOR si el


número es mayor que 4:
para mayor :X
si :x > 4 [es "MAYOR]
fin
Procedimiento que compara un número con 4, para ver si es mayor que 4
o no lo es:
para compara :X
si :x > 4 [es "SI] [es "NO]
fin

43
Capı́tulo 7

Bucles y recursividad

XLogo tiene tres primitivas que permiten la construcción de bucles: repite, repitepara
y mientras.

7.1. Bucle con repite


Esta es la sintaxis para repite:
repite n [ lista_de_comandos ]
n es un número entero y lista_de_commandos es una lista que contiene los comandos a
ejecutarse. El intérprete XLogo ejecutará la secuencia de comandos de la lista n veces.
Esto evita copiar los mismos comandos repetidas veces
Ejemplo:

repite 4 [av 100 gd 90] # n cuadrado de lado 100


repite 6 [av 100 gd 60] # un hexagono de lado 100
repite 360 [av 2 gd 1] # abreviando, casi un circulo

Observa que con el bucle repite, se define una variable interna contador o cuentarepite,
que determina el número de la iteración en curso (la primera iteración está numerada con
el 1)
repite 3 [es cuentarepite]
proporciona

1
2
3

7.2. Bucle con repitepara


repitepara hace el papel de los bucles for en otros lenguajes de programación. Consiste
en asignar a una variable un número determinado de valores comprendidos en un intervalo
y con un incremento (paso) dados. Su sintaxis es:
repitepara [ lista1 ] [ lista2 ]

44
7.3. BUCLE CON MIENTRAS 45

La lista1 contiene tres parámetros: el nombre de la variable y los lı́mites inferior y superior
del intervalo asignado a la variable. Puede añadirse un cuarto argumento, que determinarı́a
el incremento (el paso que tendrı́a la variable); si se omite, se usará 1 por defecto.

Ejemplo 1:

repitepara [i 1 4] [es :i*2]

proporciona

2
4
6
8

Ejemplo 2:

# Este procedimiento hace variar i entre 7 y 2, bajando de 1.5 en 1.5


# nota el incremento negativo
repitepara [i 7 2 -1.5]
[es lista :i potencia :i 2]

proporciona

7 49
5.5 30.25
4 16
2.5 6.25

7.3. Bucle con mientras


Esta es la sintaxis para mientras:

mientras [lista_a_evaluar] [ lista_de_comandos ]

lista_a_evaluar es la lista que contiene un conjunto de instrucciones que se evalúan como


booleano (cierto o falso). lista_de_comandos es una lista que contiene los comandos a
ser ejecutados. El intérprete XLogo continuará repitiendo la ejecución de lista_de_comandos
todo el tiempo que lista_a_evaluar devuelva cierto.

Ejemplos:

mientras ["cierto] [gd 1] # La tortuga gira sobre si misma eternamente.

# Este ejemplo deletrea el alfabeto en orden inverso:


haz "lista1 "abcdefghijklmn~
nopqrstuvwxyz
mientras [no vacio? :lista1]
[es ultimo :lista1 haz "lista1 menosultimo :lista1]
46 CAPÍTULO 7. BUCLES Y RECURSIVIDAD

7.4. Recursividad
Un procedimiento se llama recursivo cuando se llama a sı́ mismo (es un subprocedimiento
de sı́ mismo).
Un ejemplo tı́pico es el cálculo del factorial. En lugar de definir n! = n * (n - 1) *
...* 3 * 2* 1, podemos hacer:

N
(
1 si n = 0
n! = ∀n ∈
n · (n − 1)! si n 6= 0

En XLogo:

para factorial :numero


si :numero = 0
[ devuelve 1 ]
[ devuelve :numero * factorial (:numero - 1) ]
fin

Un segundo ejemplo recursivo es la espiral:

para espiral :lado


si :lado > 1250
[ alto ]
[ avanza :lado / 500
giraderecha 1
espiral :lado + 1 ]
fin
Capı́tulo 8

Modo multitortuga

Se pueden tener varias tortugas activas en pantalla. Nada más iniciarse XLogo, sólo
hay una tortuga disponible. Su número es 0. Si quieres “crear” una nueva tortuga, puedes
usar la primitiva pontortuga seguida del número de la nueva tortuga. Para evitar confu-
sión, la nueva tortuga se crea en el centro y es invisible (tienes que usar muestratortuga
para verla). Ası́, la nueva tortuga es la activa, y será la que obedezca las clásicas primiti-
vas mientras no cambies a otra tortuga con pontortuga. El máximo número de tortugas
disponibles puede fijarse en el menú Herramientas → Preferencias.

Estas son las primitivas que se aplican al modo multitortuga:

Primitiva Argumentos Uso


La tortuga número a es ahora la tortuga activa.
pontortuga,
a: número Por defecto, cuando XLogo comienza, está activa
ptortuga
la tortuga número 0.
tortuga no Da el número de la tortuga activa.
Da una lista que contiene todos los números de
tortugas no
tortuga actualmente en pantalla.
eliminatortuga
a: número Elimina la tortuga número a
ponmaximastortugas,
n: número Fija el máximo número de tortugas
pmt
maximastortugas,
no Devuelve el máximo número de tortugas
maxt

47
Capı́tulo 9

Tocar música (MIDI)

Primitivas Argumentos Uso


Carga en memoria la secuencia incluı́da en la lista.
secuencia, sec a: lista Siguiendo a esta tabla, se indica cómo escribir una
secuencia de notas musicales.
tocamusica no Toca la secuencia de notas en memoria.
instrumento, Da el número que corresponde al instrumento ac-
no
instr tualmente seleccionado.
Queda seleccionado el instrumento número a. Pue-
poninstrumento, des ver la lista de instrumentos disponibles en el
a: número
pinstr menú Herramientas → Preferencias → Soni-
do.
indicesecuencia, Da la posición del puntero en la secuencia corrien-
no
indsec te.
ponindicesecuencia, Pone el puntero en la posición a de la secuencia
a: número
pindsec corriente.
borrasecuencia,
no Elimina de memoria la secuencia corriente.
bos

Para tocar música, primero hay que poner en memoria una lista de notas llamada
secuencia. Para crear una secuencia, puedes usar la primitiva sec o secuencia. Para crear
una secuencia válida, hay que seguir las siguientes reglas:
do re mi fa sol la si: Las notas usuales de la primera octava.
Para hacer un re sostenido, anotamos re +
Para hacer un re bemol, anotamos re -
Para subir o bajar una octava, usamos ”:” seguido de ”+” o ”-”.
Ejemplo:
Después de :++ en la secuencia, todas las notas sonarán dos octavas más altas.
Por defecto, todas las notas tienen una duración uno. Si quieres aumentar o disminuir la
duración, debes escribir un número correspondiente.

48
49

Ejemplos:

sec [sol 0.5 la si]

tocará sol con la duración 1 y la y si con la duración 0.5 (el doble de rápido).

Otro ejemplo:

para partitura
# crea la secuencia de notas
sec [0.5 sol la si sol 1 la 0.5 la si 1 :+ do do :- si si 0.5 sol la
si sol 1 la 0.5 la si 1 :+ do re 2 :- sol ]
sec [:+ 1 re 0.5 re do 1 :- si 0.5 la si 1 :+ do re 2 :- la ]
sec [:+ 1 re 0.5 re do 1 :- si 0.5 la si 1 :+ do re 2 :- la ]
sec [0.5 sol la si sol 1 la 0.5 la si 1 :+ do do :- si si 0.5 sol la
si sol 1 la 0.5 la si 1 :+ do re 2 :- sol ]
fin

Para escuchar la música, ejecuta los comandos: partitura tocamusica.


Ahora veamos una aplicación interesante de la primitiva pindsec:

bos # elimina toda secuencia de memoria


partitura # pone en memoria las notas
pindsec 2 # pone el cursor en el segundo "la"
partitura # pone en memoria las mismas notas, pero movidas 2 lugares.
tocamusica # Grandioso!

También puedes elegir un instrumento con la primitiva pinstr o en el menú Herramientas


→ Preferencias → Sonido. Encontrarás la lista de instrumentos disponibles asociados a
un número.
Capı́tulo 10

Recibir entrada del usuario

10.1. Interactuar con el teclado


Durante la ejecución del programa, se puede recibir texto ingresado por el usuario a
través de 3 primitivas: tecla?, leecar y leelista.

tecla?: Da cierto o falso según se haya pulsado o no alguna tecla desde que se
inició la ejecución del programa.

leecar o leetecla:

• Si tecla? es falso, el programa hace una pausa hasta que el usuario pulse
alguna tecla.
• Si tecla? es cierto, da la última tecla que haya sido pulsada.

Estos son los valores que dan ciertas teclas:

A → 65 B → 66 C → 67 ... Z → 90
/ → -37 ó -226 4 → -38 ó -224 . → -39 ó -227 5 → -40 ó -225
Esc → 27 F1 → -112 F2 → -113 ... F12 → -123
SHIFT → -16 ESPACIO → 32 CTRL → -17 ENTER → 10

Si tienes dudas acerca del valor que da alguna tecla, puedes probar con: es leecar.
El intérprete esperará hasta que pulses una tecla, y escribirá su valor.

leelista [titulo] "palabra o leeteclado [titulo] "palabra: Presenta una ca-


ja de diálogo titulada titulo. El usuario puede escribir un texto en el área de entrada,
y esta respuesta se guardará seleccionando automáticamente si en forma de número
o de lista en la variable :palabra cuando se haga click en el botón OK.

Las primitivas caracter, (su forma corta es car y cuyo argumento es n: un número) y
unicode "a, devuelven, respectivamente, el carácter unicode que corresponde al número n
y el número unicode que corresponde al carácter a.

Ejemplo:

unicode "A devuelve 65


caracter 125 devuelve }

50
10.2. INTERACTUAR CON EL RATÓN 51

Ejemplos:
para edades
leelista [¿Qué edad tienes?] "edad
si :edad < 18 [escribe [Eres menor]]
si :edad > 17 [escribe [Eres adulto]]
si :edad > 69 [escribe [Con todo respeto!!]]
fin

para dibujar
# La tortuga es controlada con las flechas del teclado.
# Se termina con Esc.
si tecla?
[ haz "valor leecar
si :valor=-37 [giraizquierda 90]
si :valor=-39 [giraderecha 90]
si :valor=-38 [avanza 10]
si :valor=-40 [retrocede 10]
si :valor=27 [alto] ]
dibujar
fin

10.2. Interactuar con el ratón


Durante la ejecución del programa, se pueden recibir eventos del ratón a través de tres
primitivas: leeraton, raton? y posraton.
leeraton: el programa hace una pausa hasta que el usuario hace un click o un
movimiento. Entonces, da un número que representa ese evento. Los diferentes valores
son:
• 0 → El ratón se movió.
• 1 → Se hizo un click izquierdo.
• 2 → Se hizo un click central (se usa en Linux).
• 3 → Se hizo un click derecho.
posraton: Da una lista que contiene la posición actual del ratón.
raton?: Devuelve cierto o falso según toquemos o no el ratón desde que comienza
la ejecución del programa
Ejemplos:
En este primer procedimiento, la tortuga sigue los movimientos del ratón por
la pantalla.

para seguir
# cuando el raton se mueve, la tortuga cambia de posicion.
si leeraton=0 [ponpos posraton]
seguir
fin
52 CAPÍTULO 10. RECIBIR ENTRADA DEL USUARIO

Este segundo procedimiento es similar, pero hay que hacer click izquierdo para
que la tortuga se mueva.

para seguir2
si leeraton = 1 [ponpos posraton]
seguir2
fin

En este tercer ejemplo, hemos creado dos botones rosa. Si hacemos click iz-
quierdo, la tortuga dibuja un cuadrado de lado 40. Si hacemos click derecho,
la tortuga dibuja un pequeño cı́rculo. Por último si hacemos click derecho en
el botón derecho, se detiene el programa.

para boton
# crea un boton rectangular color rosa, de 50 x 100.
repite 2 [
avanza 50 giraderecha 90 avanza 100 giraderecha 90 ]
giraderecha 45 subelapiz avanza 10
bajalapiz poncolorlapiz [255 153 153]
rellena retrocede 10 giraizquierda 45 bajalapiz poncolorlapiz 0
fin

para empieza
borrapantalla boton subelapiz ponpos [150 0] bajalapiz boton
subelapiz ponpos [30 20] bajalapiz rotula "Cuadrado
subelapiz ponpos [180 20] bajalapiz rotula "Circulo
subelapiz ponpos [0 -100] bajalapiz
raton
fin

para raton
# ponemos el valor de leeraton en la variable ev
# ponemos la primer coordenada en la variable x
# ponemos la segunda coordenada en la variable y
10.3. COMPONENTES GRÁFICOS 53

haz "ev leeraton


haz "x elemento 1 posraton
haz "y elemento 2 posraton
# si hay click izquierdo
si :ev=1 & :x>0 & :x<100 & :y>0 & :y<50 [cuadrado]
# si hay click derecho
si :x>150 & :x<250 & :y>0 & :y<50 [
si :ev=1 [circunferencia]
si :ev=3 [alto] ]
raton
fin

para circunferencia
repite 90 [av 1 gi 4]
giraizquierda 90 subelapiz avanza 40 giraderecha 90 bajalapiz
fin

para cuadrado
repite 4 [avanza 40 giraderecha 90]
giraderecha 90 avanza 40 giraizquierda 90
fin

10.3. Componentes Gráficos


Desde la versión 0.9.90, XLogo permite añadir componentes gráficos en el Área de di-
bujo (botones, menús, . . . )

Las primitivas que permiten crear y modificar estos componentes terminan con el sufijo
igu (Interfaz Gráfica de Usuario – Graphical User Interface, gui son sus siglas inglesas).

10.3.1. Crear un componente gráfico


La secuencia de pasos que debes seguir es: Crear → Modificar sus propiedades o
caracterı́sticas → Mostrarlo en el Área de dibujo.

Crear un Botón
Usaremos al primitiva botonigu, cuya sintaxis es:
# Esta primitiva crea un boton llamado b
# y cuya leyenda es: Click
botonigu "b "Click

Crear un Menú
Disponemos de la primitiva menuigu, cuya sintaxis es:
# Esta primitiva crea un menu llamado m
# y que contiene 3 opciones: opcion1, opcion2 y opcion3
menuigu "m [opcion1 opcion2 opcion3]
54 CAPÍTULO 10. RECIBIR ENTRADA DEL USUARIO

Modificar las propiedades del componente gráfico


posicionigu determina las coordenadas donde se colocará el elemento gráfico. Por
ejemplo, para colocar el botón definido antes en el punto de coordenadas (20 , 100),
escribiremos:
posicionigu "b [20 100]
Si no se especifica la posición, el objeto será colocado por defecto en la esquina superior
izquierda del Área de dibujo.

Eliminar un componente gráfico


La primitiva eliminaigu elimina un componente gráfico. Para eliminar el botón anterior
eliminaigu "b

Definir acciones asociadas a un componente gráfico


La primitiva accionigu, define una acción asociada al componente, y que se realizará
cuando el usuario interactúa con él.
# Que la tortuga avance 100 al pulsar el boton "b
accionigu "b [avanza 100 ]
# En el menu, cada opcion indica su accion
accionigu "m [[escribe "Opcion1] [escribe "Opcion2] [escribe "Opcion3]]

Dibujar el componente gráfico


La primitiva dibujaigu, muestra el componente gráfico en el Área de dibujo. Para
mostrar el botón que estamos usando como ejemplo:
dibujaigu "b

Corrijamos el ejemplo anterior utilizando las nuevas primitivas:


para empieza
botonigu "Boton_Circ "Circulo
botonigu "Boton_Cuad "Cuadrado
posicionigu "Boton_Circ [50 100]
posicionigu "Boton_Cuad [-150 100]
accionigu "Boton_Circ [ circunferencia ]
10.3. COMPONENTES GRÁFICOS 55

accionigu "Boton_Cuad [ cuadrados ]


dibujaigu "Boton_Circ
dibujaigu "Boton_Cuad
fin

para circunferencia
repite 90 [av 1 gi 4]
giraizquierda 90 subelapiz avanza 40 giraderecha 90 bajalapiz
fin

para cuadrado
repite 4 [avanza 40 giraderecha 90]
giraderecha 90 avanza 40 giraizquierda 90
fin
Capı́tulo 11

Gestión de tiempos

XLogo dispone de varias primitivas que permiten conocer la hora y la fecha o utilizar
un cronómetro descendente (útil para repetir una tarea a intervalos fijos).

Primitivas Argumentos Uso


Hace una pausa en el programa, la tortuga espera
espera n: número
(n/60) segundos.
entero
Inicia un conteo descendiente de n segundos. Para
cronometro,
n: número saber que la cuenta ha finalizado, disponemos de
crono
entero la primitiva siguiente
fincronometro?, Devuelve "cierto si no hay ningún conteo activo.
no
fincrono? Devuelve "falso si el conteo no ha terminado.
Devuelve una lista compuesta de 3 números ente-
ros que representan la fecha del sistema. El primero
fecha no
indica el dı́a, el segundo el mes y el último el año.
[dı́a mes a~ no]
Devuelve una lista compuesta de 3 números ente-
ros que representan la hora del sistema. El primero
hora no
representa las horas, el segundo los minutos y el úl-
timo los segundos. [horas minutos segundos]
Devuelve el tiempo, en segundos, transcurrido des-
tiempo no
de el inicio de XLogo.

Veamos un procedimiento de ejemplo:

para reloj
# muestra la hora en forma numerica (actualizada cada 5 segundos)
si fincrono? [
bp ponfuente 75 ot
haz "ho hora
haz "h primero :ho
haz "m elemento 2 :ho
# muestra dos cifras para los minutos (completando el 0)
si :m - 10 < 0 [
haz "m palabra 0 :m ]

56
57

haz "s ultimo :ho


# muestra dos cifras para los segundos
si :s - 10 < 0 [
haz "s palabra 0 :s ]
rotula palabra palabra palabra palabra :h ": :m ": :s crono 5 ]
reloj
fin
Capı́tulo 12

Utilización de la red con XLogo

12.1. La red: ¿cómo funciona eso?


En primer lugar es necesario explicar los conceptos básicos de la comunicación en una
red para usar correctamente las primitivas de XLogo.

Figura: noción de red

Dos ordenadores pueden comunicarse a través de una red si están equipados con una
tarjeta de red (llamada también tarjeta ethernet). Cada ordenador se identifica por una
dirección personal: su dirección I.P. Esta dirección IP consta de cuatro números enteros
comprendidos entre 0 y 255 separados por puntos. Por ejemplo, la dirección IP del primer
ordenador del esquema de la figura es [Link]

Dado que no es fácil acordarse de este tipo de dirección, también se puede hacer corres-
ponder a cada dirección IP un nombre más fácil de recordar. Sobre el esquema anterior,
podemos comunicar con el ordenador de la derecha bien llamándolo por su dirección IP:
[Link], o llamándolo por su nombre: tortuga.

No nos extendamos más sobre el significado de estos números. Añadamos únicamente


una cosa que es interesante saber, el ordenador local en el cual se trabaja también se
identifica por una dirección: [Link]. El nombre que se asocia con él es habitualmente
localhost.

12.2. Primitivas orientadas a la red


XLogo dispone de 4 primitivas que permiten comunicarse a través de una red: escuchatcp,
ejecutatcp, chattcp y enviatcp.

58
12.2. PRIMITIVAS ORIENTADAS A LA RED 59

En los ejemplos siguientes, mantendremos el esquema de red de la subsección anterior.

escuchatcp: esta primitiva es la base de cualquier comunicación a través de la red.


No espera ningún argumento. Permite poner al ordenador que la ejecuta a la espera
de instrucciones dadas por otros ordenadores de la red.

ejecutatcp: esta primitiva permite ejecutar instrucciones sobre otro ordenador de la


red.
Sintaxis: ejecutatcp palabra lista → La palabra indica la dirección IP o el nom-
bre del ordenador de destino (el que va a ejecutar las órdenes), la lista contiene las
instrucciones que hay que ejecutar.

Ejemplo: desde el ordenador liebre, deseo trazar un cuadrado de lado 100 en el otro
ordenador. Por tanto, hace falta que desde el ordenador tortuga ejecute la orden
escuchatcp. Luego, desde el ordenador liebre, ejecuto:

ejecutatcp "[Link] [repite 4 [avanza 100 giraderecha 90]]

ejecutatcp "tortuga [repite 4 [avanza 100 giraderecha 90]]

chattcp: permite chatear entre dos ordenadores de la red, abriendo una ventana en
cada uno que permite la conversación.
Sintaxis: chattcp palabra lista → La palabra indica la dirección IP o el nombre
del ordenador de destino, la lista contiene la frase que hay que mostrar.
Ejemplo: liebre quiere hablar con tortuga.
tortuga ejecuta escuchatcp para ponerse en espera de los ordenadores de la red.
liebre ejecuta entonces: chattcp "[Link] [buenos dı́as].
Una ventana se abre en cada uno de los ordenadores para permitir la conversación

enviatcp: envı́a datos hacia un ordenador de la red.


Sintaxis: enviatcp palabra lista → La palabra indica la dirección IP o el nom-
bre del ordenador de destino, la lista contiene los datos que hay que enviar. Cuando
XLogo recibe los datos en el otro ordenador, responderá Si , que podrá asignarse a
una variable o mostrarse en el Histórico de comandos.

Ejemplo: tortuga quiere enviar a liebre la frase "3.14159 casi el número pi".
liebre ejecuta escuchatcp para ponerse en espera de los ordenadores de la red.
Si tortuga ejecuta entonces: enviatcp "liebre [3.14159 casi el número pi],
liebre mostrará la frase, pero en tortuga aparecerá el mensaje:
Que hacer con [ Si ] ?
Deberı́amos escribir:
es enviatcp "liebre [3.14159 casi el número pi]
o
haz "respuesta enviatcp "liebre [3.14159 casi el número pi]
En el primer caso, el Histórico de comandos mostrará Si, y en el segundo "respuesta
contendrá la lista [ Si ], como podemos comprobar haciendo
60 CAPÍTULO 12. UTILIZACIÓN DE LA RED CON XLOGO

es lista? :respuesta
cierto
es :respuesta
Si

Con esta primitiva se puede establecer comunicación con un robot didáctico a través
de su interfaz de red. En este caso, la respuesta del robot puede ser diferente, y se
podrán decidir otras acciones en base al contenido de :respuesta.

Un pequeño truco: lanzar dos veces XLogo en un mismo ordenador.

En la primera ventana, ejecuta escuchatcp.

En la segunda, ejecuta

ejecutatcp "[Link] [repite 4 [avanza 100 giraderecha 90]]

¡Ası́ puedes mover a la tortuga en la otra ventana! (¡Ah sı́!, esto es ası́ porque [Link]
indica tu dirección local, es decir, de tu propio ordenador)
Capı́tulo 13

Ejemplos de programas

13.1. Dibujar casas


para casa :c
repite 4 [
avanza (20*:c)
giraderecha 90 ]
avanza (20*:c)
giraderecha 30
repite 3 [
avanza (20*:c)
giraderecha 120 ]
fin

para colocar :c
subelapiz
giraizquierda 30
retrocede (:c*20)
giraderecha 90
avanza (:c*22)
giraizquierda 90
bajalapiz
fin

para casas
borrapantalla
ocultatortuga
subelapiz
giraizquierda 90
avanza 200
giraderecha 90
bajalapiz
casa 3
colocar 3
casa 5
colocar 5

61
62 CAPÍTULO 13. EJEMPLOS DE PROGRAMAS

casa 7
colocar 7
casa 10
fin

13.2. Dibujar un rectángulo sólido


para rect :alto :largo
si :alto = 0 | :largo = 0 [alto]
repite 2 [
avanza :alto
giraderecha 90
avanza :largo
giraderecha 90 ]
rect :alto -1 :largo -1
fin

13.3. Factorial
Recordatorio: 5! = 5 * 4 * 3 * 2 * 1
13.4. COPO DE NIEVE (GRACIAS A GEORGES NOËL) 63

para factorial :n
si :n = 1
[devuelve 1]
[devuelve :n * factorial (:n - 1)]
fin

Ejemplo:

escribe factorial 5 --> 120.0


escribe factorial 6 --> 720.0

13.4. Copo de nieve (Gracias a Georges Noël)


para copo :orden :lar
si (:orden < 1) | (:lar < 1)
[av :lar alto]
copo :orden-1 :lar/3
giraizquierda 60
copo :orden-1 :lar/3
giraderecha 120
copo :orden-1 :lar/3
giraizquierda 60
copo :orden-1 :lar/3
fin

para coponieve :orden :lar


repite 3 [
giraderecha 120
copo :orden :lar ]
fin

Ej: coponieve 5 450


64 CAPÍTULO 13. EJEMPLOS DE PROGRAMAS

13.5. Escritura
para escribir
ocultatortuga
repite 40 [
avanza 30
giraderecha 9
poncolorlapiz azar 7
rotula [XLogo es genial!] ]
fin

13.6. Conjugación (sólo verbos regulares)


13.6.1. Primera versión
para futuro :verbo
es frase "yo palabra :verbo "é
es frase "tú palabra :verbo "ás
es frase "él palabra :verbo "á
es frase "nosotros palabra :verbo "emos
es frase "vosotros palabra :verbo "éis
es frase "ellos palabra :verbo "án
fin

Ejemplo: futuro "amar


yo amaré
tú amarás
él amará
nosotros amaremos
13.7. COLORES 65

vosotros amaréis
ellos amarán

13.6.2. Segunda versión


para futuro :verbo
haz "pronombres [yo tú él nosotros vosotros ellos]
haz "terminaciones [é ás á emos éis án]
repitepara [i 1 6]
[ es fr elemento :i :pronombres palabra :verbo elemento :i :terminaciones ]
fin

Ejemplo: futuro "amar


yo amaré
tú amarás
él amará
nosotros amaremos
vosotros amaréis
ellos amarán

13.6.3. Tercera versión (con recurrencia)


para futuro :verbo
haz "pronombres [yo tú él nosotros vosotros ellos]
haz "terminaciones [é ás á emos éis án]
conjugar :verbo :pronombres :terminaciones
fin

para conjugar :verbo :pronombres :terminaciones


si vacio? :pronombres [alto]
es fr primero :pronombres palabra :verbo primero :terminaciones
conjugar :verbo mp :pronombres mp :terminaciones
fin

Ejemplo: futuro "amar


yo amaré
tú amarás
él amará
nosotros amaremos
vosotros amaréis
ellos amarán

13.7. Colores
13.7.1. Introducción
Primero, algunas aclaraciones: Habrás visto en la sección 5.1.3 que el comando poncl
puede tomar como argumento tanto un número como una lista. Aquı́ nos centraremos en
66 CAPÍTULO 13. EJEMPLOS DE PROGRAMAS

codificar valores RVA. Cada color en XLogo está codificado usando tres valores: rojo,
verde y azul, de ahı́ RVA (RGB en inglés).
Estos tres números conforman una lista que es argumento de la primitiva poncl, por
lo que representan respectivamente los componentes rojo, verde y azul de un color. Esta
manera de codificar no es muy intuitiva, ası́ que para tener una idea del color que obtendrás
puedes usar la caja de diálogo Herramientas → Elegir color del lápiz.
Sin embargo, usando esta forma de codificar colores, se hace muy fácil transformar una
imagen. Por ejemplo, si quieres convertir una foto color en escala de grises, puedes cambiar
cada punto (pı́xel) de la imagen a un valor promedio de los 3 componentes RVA. Imagina
que el color de un punto de la imagen está dado por [0 100 80]. Calculamos el promedio:
(0 + 100 + 80)/3 = 60, y asignamos el color [60 60 60] a este punto. Esta operación
debe ser realizada para cada punto de la imagen.

13.7.2. Práctica: Escala de grises


Vamos a transformar una imagen color de 100 por 100 a escala de grises. Esto significa
que tenemos 100 * 100 = 10000 puntos a modificar.
La imagen de ejemplo utilizada aquı́ está disponible en la siguiente dirección:
[Link]
Ası́ es como vamos a proceder: primero, nos referiremos al punto superior izquierdo como
[0 0]. Luego, la tortuga examinará los primeros 100 puntos (pixeles) de la primera lı́nea,
seguidos por los primeros 100 de la segunda, y ası́ sucesivamente. Cada vez tomaremos el
color del punto usando encuentracolor, y el color será cambiado por el promedio de los
tres [r v a] valores. Aquı́ está el código principal: (No olvides cambiar la ruta del archivo
en el procedimiento!)

para transform
# Debes cambiar la ruta de la imagen [Link]
# Ej: cargaimagen [/home/usuario/imagenes/[Link]]
borrapantalla ocultatortuga
pondirectorio "/home/usuario/imagenes
cargaimagen "[Link]
escalagris
fin

para escalagris
repitepara [y 0 -100 -1]
[ repitepara [x 0 100]
# asignamos el promedio de color del punto al color del lapiz
[ poncolorlapiz pixel encuentracolor lista :x :y
# convertimos el punto escala de grises
punto lista :x :y ] ]
fin

para pixel :lista1


# devuelve el promedio de los 3 numeros [r v a]
haz "r primero :lista1
haz "lista1 menosprimero :lista1
13.7. COLORES 67

haz "v primero :lista1


haz "lista1 menosprimero :lista1
haz "a primero :lista1
haz "color redondea (:r+:v+:a)/3
devuelve frase :color frase :color :color
fin

13.7.3. Negativo
Para cambiar una imagen a su negativo, se puede usar el mismo proceso de la escala de
grises, excepto que en lugar de hacer el promedio de los números [r v a], los reemplazamos
por su complemento, o sea la diferencia a 255.
Ejemplo: Si un punto (pı́xel) tiene un color [2 100 200], lo reemplazamos con [253 155 55].
Podrı́amos usar el mismo código que en el ejemplo anterior, cambiando únicamente el pro-
cedimiento pixel, pero veamos un procedimiento recursivo:

para transform2
# Debes cambiar la ruta de la imagen [Link]
# Ej: c:\Mis Documentos\Mis imagenes\[Link]
borrapantalla
ocultatortuga
pondirectorio "c:\\Mis\ Documentos\\Mis\ imagenes
cargaimagen "[Link]
negativo 0 0
fin

para negativo :x :y
si :y = -100
[ alto ]
[ si :x = 100
[ haz "x 0 haz "y :y-1]
[ poncolorlapiz pixel2 encuentracolor lista :x :y
punto lista :x :y ] ]
negativo :x+1 :y
fin

para pixel2 :lista1


# devuelve el promedio de los 3 numeros [r v a]
haz "r primero :lista1
haz "lista1 menosprimero :lista1
68 CAPÍTULO 13. EJEMPLOS DE PROGRAMAS

haz "v primero :lista1


haz "lista1 menosprimero :lista1
haz "a primero :lista1
devuelve frase (255 - :r) frase (255 - :v) (255 - :a)
fin

13.8. Listas (Gracias a Olivier SC)


Supongo que apreciarás este hermoso programa:
para revertir :w
si vacio? :w
[devuelve "]
[devuelve palabra ultimo :w revertir menosultimo :w ]
fin

para palindromo :w
si :w = revertir :w
[devuelve "cierto]
[devuelve "falso]
fin

para palin :n
si palindromo :n
[escribe :n alto]
[haz "texto suma :n revertir :n
haz "texto frase "igual\ a :texto
haz "texto frase revertir :n :texto
haz "texto frase "mas :texto
haz "texto frase :n :texto
escribe :texto
palin :n + revertir :n ]
fin

Ejemplo: palin 78

78 mas 87 igual a 165


13.9. UN LINDO MEDALLÓN 69

165 mas 561 igual a 726


726 mas 627 igual a 1353
1353 mas 3531 igual a 4884
4884

13.9. Un lindo medallón


para roset
pongrosor 2
repite 6 [
repite 60
[avanza 2 giraderecha 1]
giraderecha 60
repite 120
[avanza 2 giraderecha]
giraderecha 60 ]
pongrosor 1
fin

para roseton
roset
repite 30
[avanza 2 giraderecha 1]
roset
repite 15
[avanza 2 giraderecha 1]
roset
repite 30
[avanza 2 giraderecha 1]
roset
fin
Ejemplo:
borrapantalla ocultatortuga
poncolorpapel 0 poncolorlapiz 5
roset
subelapiz ponposicion [-300 0] bajalapiz
ponrumbo 0 roseton
Capı́tulo 14

Acerca de XLogo

14.1. Desinstalar
Para desinstalar XLogo, todo lo que hace falta es borrar el archivo [Link] y
el archivo de configuración .xlogo que se encuentra en /home/tu_nombre en Linux, o
c:\windows\.xlogo en Windows.

14.2. El sitio
Para conseguir la última versión y corrección de errores, visita el sitio de XLogo de
vez en cuando:

[Link]

Siéntete libre de contactar al autor si tienes algún problema con la instalación o el uso.
Toda sugerencia será bienvenida.

14.3. Acerca de este documento


XLogo: Manual del Usuario
Original en francés revisado por Loı̈c (19 de diciembre de 2007).

Traducido al español por Marcelo Duschkin y Álvaro Valdés (11 de enero de 2008)

Kevin Donnelly: traducción al inglés del manual, y traducción al galés del programa.

Agradecimientos
Olivier SC: por sus sugerencias, y por las invalorables pruebas que me permitieron
depurar el intérprete XLogo.

Daniel Ajoy, por sus sugerencias en cuanto a la compatibilidad de las primitivas en


español y su valiosa colaboración en pruebas de esa versión.

70
Capı́tulo 15

Carnaval de Preguntas – Artimañas –


Trucos que conocer

15.1. Preguntas frecuentes


Por más que borro un procedimiento en el Editor, reaparece todo
el tiempo!
Cuando se sale del Editor, éste se limita únicamente a guardar o poner al dı́a los
procedimientos definidos en él. La única forma de borrar un procedimiento en XLogo es
utilizar la primitiva borra o bo.
Ejemplo: borra "toto → borra el procedimiento toto

¿Cómo hago para escribir rápidamente una orden utilizada pre-


viamente?
Primer método: con el ratón, haz click en la zona del Histórico sobre la lı́nea deseada.
Ası́ reaparecerá inmediatamente en la Lı́nea de Comando
Segundo método: con el teclado, las flechas Arriba y Abajo permiten navegar por la
lista de los comandos anteriores (más práctico)

En la opción Sonido del cuadro de diálogo Preferencias, no hay


disponible ningún instrumento
Como decı́amos en la sección 3.3, esto se debe a que la versión de Java para Windows
no incluye los bancos de sonido, y deben instalarse manualmente.
En primer lugar, hay que descargarlos desde:
[Link]
la versión mı́nima (unos 350 kb),
[Link]
la versión intermedia (algo más de 1 Mb) y
[Link]
la versión de luxe (casi 5 Mb).

Una vez descargados, debemos descomprimirlos en el directorio audio de la instalación


Java que, dependiendo de la versión, puede ser:

71
72CAPÍTULO 15. CARNAVAL DE PREGUNTAS – ARTIMAÑAS – TRUCOS QUE CONOCER

C:\Archivos de programa\Java\jre1.6.0\lib\audio

creando el directorio audio si éste no existe.

Hecho esto, la lista de instrumentos estará disponible.

Tengo problemas de refresco de pantalla cuando la tortuga dibuja!


Problema también conocido y tı́pico de JRE >1.4.2. intentaré ponerle remedio en lo
sucesivo, quizá pueda hacer algo. Dos soluciones por el momento:

Minimizar la ventana y volver a aumentarla (restaurarla)

Utilizar siempre la versión más moderna de Java.

Utilizo la versión en Esperanto, pero no puedo escribir los carac-


teres especiales
Cuando escribes en la Lı́nea de comandos o en el Editor, si haces click con el botón
derecho del ratón, aparece un menú contextual. En ese menú se encuentran las funcio-
nes habituales de Edición (copiar, cortar, pegar) y los caracteres especiales del Esperanto
cuando se selecciona ese idioma.

Utilizo la versión en Español, y no puedo utilizar las primitivas


animacion, division, separacion y ponseparacion
Corregido desde la versión 0.9.20e. Para versiones anteriores de XLogo:

animacion, se escribe animacicn, con “c” en lugar de “o”.

division, separacion y ponseparacion se escriben con tilde: división, separación


y ponseparación.

Obviamente, el mejor consejo es que actualices a la versión más moderna de XLogo.

Uso Windows XP y tengo correctamente instalado y configurado


el JRE; pero hago doble click en el icono de XLogo y no pasa
nada!!
A veces en la primera ejecución de XLogo en Windows XP pasa eso. Dos opciones:

Utiliza la versión [Link] también disponible en nuestra web.

Si presionas Alt+Contrl+Supr y en el Gestor de Procesos “matas” el correspon-


diente a javaw, se inicia XLogo. Desde ese momento, funciona correctamente ha-
ciendo “doble click ” sobre el icono del archivo [Link].
15.2. ¿CÓMO PUEDO AYUDAR? 73

15.2. ¿Cómo puedo ayudar?


Informándome de todos los errores (“bugs”) que encuentres. Si puedes reproducir
sistemáticamente un problema detectado, mejor aún

Toda sugerencia dirigida a mejorar el programa es siempre bienvenida

Ayudando con las traducciones, en particular el inglés . . .

Las palabras de ánimo siempre vienen bien


Índice alfabético

#, 34 avanza, 22
π, 30 Ayuda, 16
*, 30 azar, 30
+, 29 azul, 26
-, 29 azuloscuro, 27
/, 30
backslash, 20
=, 21
bajalapiz, 24
?, 33
bajalapiz?, 33
&, 21
Barra invertida, 20
\\, 20
bl, 24
\n, 20
bl?, 33
\ , 20
blanco, 26
abreflujo, 38 bo, 36
Abrir, 10 Booleano, 29
absoluto, 30 borra, 8, 36
abs, 30 borrapantalla, 25
accionigu, 54 Borrar procedimientos, 8, 13
Acerca de ..., 17 borrasecuencia, 48
acos, 30 borratexto, 28
borratodo, 8, 36
adios, 11
borravariable, 36
agrega, 32
bos, 48
agregalineaflujo, 38
botonigu, 53
Alto, 7
bov, 36
alto, 42
bp, 25
amarillo, 26
bt, 28
Animación, 27
Bucles, 44
animacion, 27
anterior?, 33 Calidad del dibujo, 15
antes?, 33 calidaddibujo, 25
arco, 26 cambiadirectorio, 37
arcocoseno, 30 cambiasigno, 30
arcoseno, 30 car, 50
arcotangente, 30 caracter, 50
Área de Dibujo, 7 carga, 38
Argumentos, 18 cargaimagen, 38
Argumentos Opcionales, 18 cat, 37
asen, 30 catalogo, 37
Aspecto, 13 cd, 37
atan, 30 cdib, 25
av, 22 centro, 23

74
ÍNDICE ALFABÉTICO 75

chattcp, 59 dibujaigu, 54
ci, 38 diferencia, 21, 29
cierraflujo, 38 dir, 37
cierto, 33 directorio, 37
circulo, 26 distancia, 23
cl, 24 div, 30
cociente, 30 division, 21, 30
Color de lápiz preasignado, 14
Color de papel preasignado, 14 ec, 24
colorcuadricula, 22 ed, 7, 19
colorejes, 23 Edición, 12
Colores, 26 Editar, 7
Colores (ejemplo), 65 Editor de Procedimientos, 7
colorlapiz, 24 ejecuta, 36
colorpapel, 25 ejecutatcp, 59
colortexto, 28 ejes, 14, 23
Comando de Inicio, 7 Ejes cartesianos, 14
Comandos, 18 ejex, 14, 23
Comentarios, 34 ejex?, 34
Condicionales, 43 ejey, 14, 23
contador, 44 ejey?, 34
Convenciones, 18 Elegir color del lápiz, 12
Copiar, 7, 12 Elegir color del papel, 12
Copo de nieve, 63 elemento, 32
Cortar, 7, 12 elige, 32
cos, 30 eliminaigu, 54
cosa, 36 eliminatortuga, 47
Coseno, 30 encuentracolor, 24
coseno, 30 entero?, 33
crono, 56 enviatcp, 59
cronometro, 56 es, 28
cs, 30 escribe, 28
Cuadrı́cula, 14 escribelineaflujo, 38
cuadricula, 14, 22 escuchatcp, 59
cuadricula?, 34 Espacios, 20
cuenta, 32 espera, 56
cuentarepite, 44 esquinasventana, 25
cyan, 26 estilo, 28

def, 36 Factorial, 37, 62


define, 36 falso, 33
Definir archivos de inicio, 12 fecha, 56
Desinstalar, 70 Figura de la tortuga, 13
detieneanimacion, 27 fin, 19, 34
detienecuadricula, 14, 22 fincrono?, 56
detieneejes, 14, 23 fincronometro?, 56
detienetodo, 42 finflujo?, 38
dev, 42 fl, 24
devuelve, 37, 42 forma, 24
76 ÍNDICE ALFABÉTICO

Forma del lápiz, 15 largoetiqueta, 25


formalapiz, 24 leecar, 50
fr, 32 leecarflujo, 38
frase, 32 leelineaflujo, 38
ftexto, 28 leelista, 50
Fuente, 15 leeraton, 51
fuente, 26 leetecla, 50
fuentetexto, 28 leeteclado, 50
Funciones trigonométricas, 30 .lgo, 12
Licencia GPL, 16
gd, 22 limpia, 25
Gestión de tiempos, 56 lista, 32
gi, 22 lista?, 33
giraderecha, 22 Listado de primitivas, 22
giraizquierda, 22 listaflujos, 38
gl, 24 listaprocs, 36
go, 24 Listas, 18, 31, 68
goma, 24 listavars, 36
gris, 26 local, 36
grisclaro, 26 log, 30
grosorlapiz, 24 log10, 30
guarda, 37 Logaritmos, 30
Guardar, 10
Guardar como ..., 10 magenta, 26
Guardar en formato RTF, 11 Marco de adorno, 14
Guardar imagen como. . . , 11 marron, 27
guardatodo, 38 maximastortugas, 47
maxt, 47
hacia, 23 Mayúsculas y minúsculas, 21
haz, 36 Medallón, 69
hazlocal, 36 Memoria destinada a XLogo, 15
Histórico de Comandos, 7, 19 menosprimero, 32
hora, 56 menosultimo, 32
Idioma, 13 mensaje, 26
iguales?, 21, 33 menuigu, 53
ila, 24 MIDI, 15, 48
Imprimir imagen, 11 miembro, 32
imts, 36 miembro?, 33
imvars, 36 mientras, 42, 44
indicesecuencia, 48 modojaula, 25
indsec, 48 modoventana, 25
instr, 48 modovuelta, 25
instrumento, 48 mp, 32
invierte, 32 msj, 26
inviertelapiz, 24 mt, 24
italica, 28 mu, 32
muestratortuga, 24, 47
.jpg, 11, 38 multitortuga, 47
Lı́nea de Comando, 7 Número máximo de tortugas, 14
ÍNDICE ALFABÉTICO 77

Números, 18 pondirectorio, 37
naranja, 27 ponestilo, 28
negrita, 28 ponforma, 13, 24
negro, 26 ponformalapiz, 24
nft, 28 ponfuente, 25
ninguno, 28 ponfuentetexto, 28
no, 29 pongrosor, 24
nombrefuentetexto, 28 ponindicesecuencia, 48
Nuevo, 10 poninstrumento, 15, 48
numero?, 33 ponlapiz, 24
ponmaximastortugas, 47
o, 21, 29 ponnombrefuentetexto, 28
objeto, 36 ponpos, 23
ocultatortuga, 24 ponposicion, 23
Operadores aritméticos, 21 ponprimero, 32
Operadores lógicos, 21, 29 ponr, 23
Opuesto, 30 ponrumbo, 23
ot, 24 ponsep, 29
ponseparacion, 29
palabra, 32 pontama~nopantalla, 25
palabra?, 33 pontortuga, 47
Palabras, 18 ponultimo, 32
para, 19, 34 ponx, 23
pcc, 22 ponxy, 23
pcd, 25 pony, 23
pce, 23 Portapapeles, 11
pctexto, 28 pos, 23
Pegar, 7, 12 posicion, 23
pest, 28 posicionigu, 54
pf, 25 posraton, 51
pfl, 24 potencia, 30
pforma, 24 pp, 32
pft, 28 pr, 32
pi, 30 Preferencias, 13
pindsec, 48 prim?, 34
pinstr, 48 primero, 32
pla, 24 primitiva?, 34
pmt, 47 Primitivas, 18
pnft, 28 Primitivas personalizadas, 12
.png, 11, 38 proc?, 34
poncalidaddibujo, 25 procedimiento?, 34
poncl, 24 Procedimientos, 19
poncolorcuadricula, 14, 22 producto, 21, 30
poncolorejes, 14, 23 Propiedades, 24
poncolorlapiz, 12, 24 ptortuga, 47
poncolorpapel, 12, 24 pu, 32
poncolortexto, 28 punto, 23
poncp, 24
pondir, 37 quita, 32
78 ÍNDICE ALFABÉTICO

raizcuadrada, 30 Tangente, 30
Ratón, 51 tangente, 30
raton?, 51 tecla?, 50
rc, 30 Teclado, 50
re, 22 tiempo, 56
Recursividad, 46 tipea, 28
redondea, 30 tocamusica, 48
reemplaza, 32 Tocar música, 48
refrescar, 27 tortuga, 47
rellena, 40 tortugas, 47
rellenazona, 40 tpant, 25
repite, 42, 44 Traducción de la Licencia, 16
repitepara, 44 Traducir procedimientos, 13
Resaltado, 16 Traducir XLogo, 16
resto, 30 trazado, 37
retrocede, 22 truncar, 30
rojo, 26 tv, 25
rojooscuro, 26
ultimo, 32
rosa, 27
unicode, 50
rotula, 25
RTF, 11 vacio?, 33
rumbo, 23 Valor absoluto, 30
Ruptura de secuencia, 42 var?, 34
variable?, 34
Salir, 9, 11 Variables, 20, 35
Saltos de lı́nea, 20 Variables globales, 36
sec, 48 Variables locales, 36
secuencia, 48 Variables opcionales, 35
Seleccionar todo, 12 Velocidad de la tortuga, 13
sen, 30 Ventana de Editor, 19
Seno, 30 verde, 26
seno, 30 verdeoscuro, 27
separacion, 29 violeta, 27
si, 43 visible?, 33
Sintaxis, 21
sl, 24 y, 21, 29
Sonido, 15
subelapiz, 24 Zoom, 7
subindice, 28 zoom, 25
subrayado, 28
suma, 21, 29
superindice, 28

tachado, 28
Tamaño de la ventana, 15
Tamaño máximo del lápiz, 14
tama~nopantalla, 25
tama~noventana, 25
tan, 30

También podría gustarte