SlideShare una empresa de Scribd logo
Manual del Usuario


      Original en Franc´s: Lo¨c Le Coq
                       e     ı

        o ´
Traducci´n: Alvaro Vald´s y Marcelo Duschkin
                       e


        http://xlogo.tuxfamily.org
´
Indice general

1. Presentaci´n
              o                                                                                                                                        5
   1.1. Introducci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                  o                                                                                                                                    5
   1.2. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                             5

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

3. Opciones del Men´ u                                                                                                                                 11
   3.1. Men´ “Archivo” . . . .
           u                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
   3.2. Men´ “Edici´n” . . . .
           u       o               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
   3.3. Men´ “Herramientas” .
           u                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
   3.4. Men´ “Ayuda” . . . . .
           u                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17

4. Convenciones adoptadas para XLogo                                                                                                                   19
   4.1. Comandos y su interpretaci´n . . . .
                                     o                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
   4.2. Procedimientos . . . . . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
   4.3. El caracter especial  . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
   4.4. May´sculas y min´sculas . . . . . . .
             u            u                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
   4.5. Operadores y sintaxis . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
        4.5.1. Operadores aritm´ticos . . . .
                                  e                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
        4.5.2. Operadores l´gicos . . . . . .
                             o                                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
   4.6. Las tildes . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23

5. Listado de primitivas                                                                                                                               24
   5.1. Movimientos de la tortuga; poner l´piz y colores
                                            a                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
        5.1.1. Movimientos . . . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
        5.1.2. Propiedades . . . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
        5.1.3. La tortuga en Tres Dimensiones . . . . .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
        5.1.4. Acerca de los colores . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
        5.1.5. Animaci´n . . . . . . . . . . . . . . . . .
                       o                                                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
        5.1.6. Propiedades del Hist´rico de Comandos .
                                    o                                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
   5.2. Operaciones aritm´ticas y l´gicas . . . . . . . .
                          e        o                                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
   5.3. Operaciones con listas . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
   5.4. Booleanos . . . . . . . . . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
   5.5. Trabajando con procedimientos y variables . . .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
        5.5.1. Acerca de los procedimientos . . . . . .                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43

                                                           2
´
INDICE GENERAL                                                                                                                                      3


          5.5.2. Procedimientos . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
          5.5.3. Variables fijas . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
          5.5.4. Variables opcionales . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
          5.5.5. Conceptos acerca de variables                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
          5.5.6. La primitiva trazado . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
   5.6.   Listas de Propiedades . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
   5.7.   Manejo de archivos . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
   5.8.   Funci´n avanzada de relleno . . . . .
                o                                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
   5.9.   Comandos de ruptura de secuencia .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53

6. Condicionales                                                                                                                                   54

7. Bucles y recursividad                                                                                                                           56
   7.1. Bucle con repite . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56
   7.2. Bucle con repitepara . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
   7.3. Bucle con mientras . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   57
   7.4. Bucle con paracada . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   58
   7.5. Bucle con repitesiempre        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59
   7.6. Recursividad . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59

8. Modo multitortuga                                                                                                                               60

9. Tocar m´ sica (MIDI)
          u                                                                                                                                        61

10.Recibir entrada del usuario                                                                                                                     63
   10.1. Interactuar con el teclado .      . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
   10.2. Interactuar con el rat´n . .
                               o           . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
   10.3. Componentes Gr´ficos . . .
                          a                . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
         10.3.1. Crear un componente       gr´fico .
                                             a                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66

11.Gesti´n de tiempos
        o                                                                                                                                          69

12.Utilizaci´n de la red con XLogo
             o                                                                                                                                     71
   12.1. La red: ¿c´mo funciona eso? . . . . . . . . . . . . . . . . . . . . . . . . . .
                   o                                                                                                                               71
   12.2. Primitivas orientadas a la red . . . . . . . . . . . . . . . . . . . . . . . . .                                                          71

13.Ejemplos de programas                                                                                                                           74
   13.1. Dibujar casas . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
   13.2. Dibujar un rect´ngulo s´lido . . . . . . .
                          a        o                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
   13.3. Factorial . . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
   13.4. Copo de nieve (Gracias a Georges No¨l)   e                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
   13.5. Escritura . . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
   13.6. Conjugaci´n (s´lo verbos regulares) . . .
                    o    o                                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
         13.6.1. Primera versi´n . . . . . . . . . .
                               o                                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   77
         13.6.2. Segunda versi´n . . . . . . . . . .
                                o                                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
         13.6.3. Tercera versi´n (con recurrencia)
                              o                                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
   13.7. Colores . . . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
         13.7.1. Introducci´n . . . . . . . . . . . .
                            o                                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   78
         13.7.2. Pr´ctica: Escala de grises . . . . .
                   a                                                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   79
         13.7.3. Negativo . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   80
4                                                                           ´
                                                                            INDICE GENERAL


    13.8. Listas (Gracias a Olivier SC) . . . . . . . . . . . . . . . . . . . . . . . . . .     81
    13.9. Un lindo medall´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                          o                                                                     82

14.Acerca de XLogo                                                                              83
   14.1. Desinstalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      83
   14.2. El sitio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   83
   14.3. Acerca de este documento . . . . . . . . . . . . . . . . . . . . . . . . . . .         83

15.Carnaval de Preguntas – Artima˜ as – Trucos que conocer
                                         n                                                      84
   15.1. Preguntas frecuentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       84
   15.2. ¿C´mo puedo ayudar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
           o                                                                                    86
Cap´
   ıtulo 1

Presentaci´n
          o

1.1.     Introducci´n
                   o
    Logo es un lenguaje desarrollado a finales de los a˜os 60 por Seymour Papert. Es un
                                                      n
lenguaje excelente para comenzar a estudiar programaci´n, y ense˜a lo b´sico acerca de
                                                        o          n     a
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
                                        ı,                            a           e
posible operar con palabras y listas.

    Este estilo gr´fico hace de Logo un lenguaje ideal para principiantes, y especialmente
                  a
f´cil para los ni˜os.
 a               n

    XLogo es un int´rprete Logo escrito en Java. Actualmente soporta diez idiomas
                      e
       e      e       n           e ´
(Franc´s, Ingl´s, Espa˜ol, Portugu´s, Arabe, Esperanto, Gallego, Asturiano y Griego) 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
                                          a
la ventaja de ser multi-plataforma; esto es, XLogo podr´ ejecutarse en cualquier sistema
                                                       a
operativo que soporte Java; tanto usando Linux como Windows, MacOS o Solaris, XLogo
funcionar´ sin problemas.
          a




                                           5
Cap´
   ıtulo 2

Caracter´
        ısticas de la Interfaz

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




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


2.2.     La ventana principal




                                           6
2.3. EL EDITOR DE PROCEDIMIENTOS                                                       7


     En la fila superior, est´n las entradas t´
                            a                ıpicas de men´: Archivo, Edici´n, Herra-
                                                          u                o
     mientas, Ayuda

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

                                    a ´
     En el medio de la pantalla, est´ el Area de Dibujo (donde se mueve la tortuga).

     A la derecha del ´rea de dibujo se encuentra una barra de herramientas vertical con
                      a
     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
                a                    o
     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
                                                         o
     arriba y flecha abajo del teclado (lo que es m´s pr´ctico).
                                                  a    a

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

        • Editar permite abrir la ventana del editor de procedimientos.
        • Alto interrumpe la ejecuci´n del programa ingresado.
                                    o


2.3.     El editor de procedimientos




   Hay cuatro maneras de abrir el editor:

     Escribir editatodo o edtodo en la L´ınea de Comando. La ventana del editor se
     abrir´ mostrando todos los procedimientos definidos hasta ese momento.
          a

     Si deseas editar un procedimiento en especial (o algunos), debes usar ed o edita en
     la l´
         ınea de comandos seguido del nombre de procedimiento, o la lista con los nombres
     de procedimientos que deseas editar:
     edita "nombre_procedimiento
     o:
     edita [proc_1 proc_2]

     Hacer click en el bot´n Editar.
                          o

     Usar el atajo de teclado Alt+E

Estos son los diferentes botones que encontrar´s en la ventana del Editor:
                                              a
8                              CAP´
                                  ITULO 2. CARACTER´
                                                   ISTICAS DE LA INTERFAZ


                  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
                                      o
                  aplicar los procedimientos recientemente incorporados.
                  Atajo de teclado: ALT+Q.
                  Cierra la ventana del editor sin guardar los ultimos cambios.
                                                                ´
                  Ten presente que NO aparece ning´n mensaje de confirmaci´n.
                                                     u                        o
                  Aseg´rate bien de que realmente no hay nada que guardar.
                       u
                  Atajo de teclado: ALT+C.

                  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.
                                     u
                  Para ello se abre la ventana siguiente:




                  Permite deshacer los ultimos cambios realizados en los procedi-
                                       ´
                  mientos.
                  “Rehace” lo deshecho con el bot´n anterior.
                                                 o




    Nota: Aunque aqu´ se representa la imagen de Tux (mascota de Linux) en el bot´n
                        ı                                                                 o
“Guardar ”, en realidad se muestra la tortuga activa para dar la idea de “enviar la informa-
ci´n a la tortuga”; por ejemplo, si la tortuga activa es la n´mero 3 (secci´n 3.3):
  o                                                          u             o
2.3. EL EDITOR DE PROCEDIMIENTOS                                                         9




    En la parte inferior se encuentra l´
                                       ınea donde definir el Comando de Inicio, que se
                                             ´
activa con el bot´n situado a la derecha del Area de Dibujo.
                 o



Al pulsar el bot´n, se ejecuta inmediatamente el Comando de Inicio sin necesidad de
                  o
escribirlo en la L´
                  ınea de Comandos, lo que es util 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
                        o

     ...


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.
                                  u

Al hacer click para imprimir, aparecer´ una ventana de di´logo donde podremos configurar
                                      a                  a
distintas opciones de impresi´n:
                             o

     General: Impresora a utilizar, Imprimir a un archivo, Rango de Impresi´n y N´mero
                                                                           o     u
     de copias.




     Configurar P´gina: Tipo de papel, Origen del papel, Orientaci´n de la Hoja y
                a                                                o
     M´rgenes
      a
10                           CAP´
                                ITULO 2. CARACTER´
                                                 ISTICAS DE LA INTERFAZ




     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:
                                 a                        o




Pulsamos S´ y termina la ejecuci´n.
          ı                     o
Cap´
   ıtulo 3

Opciones del Men´
                u

3.1.   Men´ “Archivo”
          u
   Archivo → Nuevo: Elimina todos los procedimientos y variables definidos hasta el
   momento para comenzar un nuevo espacio de trabajo. Se abrir´ una ventana para
                                                                  a
   confirmar la eliminaci´n de todos los procedimeintos y variables:
                        o




   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
                                           o       a
   haya asignado un nombre como se acaba de explicar en el punto anterior.

                                       11
12                                             CAP´                        ´
                                                  ITULO 3. OPCIONES DEL MENU


     Archivo → Capturar imagen → Guardar imagen como. . . : Permite guardar
     la imagen del ´rea de dibujo en formato jpg o png. Para ello, puedes seleccionar pre-
                   a
     viamente una parte de la imagen pulsando el bot´n izquierdo del rat´n y arrastrando.
                                                    o                   o

     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
         a                                                                          o
     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
                                                  o
     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),
             o
     manteniendo los colores de los mensajes. Si no se escribe la extensi´n .rtf, se a˜ade
                                                                         o            n
     autom´ticamente.
           a




     Archivo → Salir: Finaliza la ejecuci´n de XLogo. Tambi´n puede terminarse la
                                          o                     e
     ejecuci´n desde la L´
            o            ınea de comandos con la primitiva adi´s.
                                                              o


3.2.    Men´ “Edici´n”
           u       o
     Edici´n → Copiar: copia el texto seleccionado en el portapapeles. Atajo de teclado:
          o
     Control+C

     Edici´n → Cortar: corta el texto seleccionado y lo copia en el portapapeles. Atajo
           o
     de teclado: Control+X
´
3.3. MENU “HERRAMIENTAS”                                                            13


    Edici´n → Pegar: pega el texto desde el portapapeles a la l´
          o                                                    ınea de comandos. Atajo
    de teclado: Control+V

    Edici´n → Seleccionar todo: Selecciona todo lo que se encuentra escrito en la
         o
    L´
     ınea de Comandos.


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




    Tambi´n accesible con el comando poncolorlapiz. (Secci´n 5.1.2)
         e                                                o

    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
                                                                      a          e
    accesible con el comando poncolorpapel. (Secci´n 5.1.2)
                                                    o

    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-
                                                                         a
    primitivas” del lenguaje XLogo. Pero no pueden ser modificadas por el usuario. As´ı
    se pueden definir primitivas personalizadas .

    Herramientas → Traducir procedimientos: Abre una caja de di´logo que per-
                                                                         a
    mite traducir los comandos XLogo entre dos idiomas. Es muy util, en particular,
                                                                    ´
    cuando se obtienen c´digos Logo en ingl´s (de internet, por ejemplo) para expresar-
                         o                  e
    los en el idioma deseado (Espa˜ol, Franc´s, . . . )
                                  n         e
14                                            CAP´                        ´
                                                 ITULO 3. OPCIONES DEL MENU




     Herramientas → Borra procedimientos: Abre una caja de di´logo que permite
                                                                     a
     selccionar el procedimiento que se desea borrar, de una forma m´s sencilla que con
                                                                    a
     la primitiva borra.




     Herramientas → Preferencias: Abre una caja de di´logo donde se pueden confi-
                                                     a
     gurar varios aspectos:

       • General:
           ◦ Idioma: Permite elegir entre Franc´s, Ingl´s, Espa˜ol, Gal´s, Portugu´s,
                                               e       e       n       e          e
                        ´
             Esperanto, Arabe y Gallego. Nota que las primitivas se adec´an a cada
                                                                          u
             lenguaje.
           ◦ Aspecto: Permite definir el aspecto de la ventana XLogo. Est´n disponi-
                                                                        a
             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
                o                                                           e
         con el comando ponforma (Secci´n 5.1.2)
                                        o
       • Opciones:
´
3.3. MENU “HERRAMIENTAS”                                                             15




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




         ◦ N´ mero m´ximo de tortugas: Para el modo multitortuga (secci´n 8).
            u          a                                               o
           Por defecto 16.
         ◦ Tama˜ o m´ximo del l´piz: Puedes fijar un tama˜o l´
                 n     a       a                        n ımite para el l´piz.
                                                                         a
16                                          CAP´                        ´
                                               ITULO 3. OPCIONES DEL MENU


           Si no se va a utilizar esta limitaci´n, introduce el n´mero -1 en el recuadro
                                               o                 u
           asociado.
         ◦ Forma del l´piz: Cuadrado o Redondo
                      a
         ◦ Tama˜ o de la ventana para dibujar: Puedes establecer un tama˜o per-
                  n                                                       n
                              ´
           sonalizado para el Area de Dibujo. Por defecto XLogo establece un ´rea
                                                                             a
           de 1000 por 1000 pixels.
           Atenci´n: seg´n aumenta el tama˜o de la imagen, puede ser necesario
                   o       u                n
           aumentar la memoria destinada a XLogo. Un mensaje de error advertir´ a
           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
                                   u
           ralentizaci´n de la ejecuci´n.
                      o               o
         ◦ Borrar pantalla al salir del editor: S´ o No
                                                 ı
         ◦ Tama˜ o de la ventana para dibujar: Determina las dimensiones del
                 n
           ´
           Area 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 Area de
                                                                    n
           Dibujo sea demasiado grande. La modificaci´n de este par´metro s´lo se
                                                        o             a        o
           har´ efectiva tras cerrar y reiniciar XLogo.
              a
           Atenci´n: no aumentar en exceso y/o sin raz´n este valor, ya que pue-
                   o                                      o
           de ralentizar considerablemente el sistema. Un ejemplo en el que se puede
           necesitar bastante memoria disponible es al trabajar en el modo 3D com
           dise˜os muy complejos.
               n

     • Sonido: La lista de instrumentos que puede imitar la tarjeta de sonido a trav´s
                                                                                    e
       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´ Esto se debe a que la versi´n
                                                  ıa.                          o
       de Java para Windows no incluye los bancos de sonido, y deben instalarse
       manualmente. Echa un vistazo a la secci´n 15.1.
                                              o




     • Fuente: Elige el tipo de letra y su tama˜o
                                               n
´
3.4. MENU “AYUDA”                                                                    17




       • Resaltado: Elige los colores que se utilizar´n en el resaltado de primitivas,
                                                       a
         palabras, variables n´meros, par´ntesis y corchetes.
                              u          e


3.4.    Men´ “Ayuda”
           u
    Ayuda → Licencia: Muestra la licencia original GPL (en Ingl´s) bajo la cual es
                                                               e
    distribuido este programa.




    Ayuda → Traducci´n de la Licencia: Refiere a una traducci´n al espa˜ol de la
                         o                                           o        n
    licencia GPL, sin efectos legales, s´lo como referencia para entender la versi´n en
                                        o                                         o
    Ingl´s.
        e
    Ayuda → Traducir XLogo: Abre una ventana para a˜adir y/o corregir traduccio-
                                                   n
    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
                o              a
    guardar los cambios y que debes enviar a loic@xlogo.tuxfamily.org
18                                           CAP´                        ´
                                                ITULO 3. OPCIONES DEL MENU




     Ayuda → Acerca de. . . : Lo de siempre . . . y ¡¡xlogo.tuxfamily.org 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
             o
en particular.


4.1.     Comandos y su interpretaci´n
                                   o
   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
                                                                                  u
de par´metros que son llamados argumentos. Por ejemplo, la primitiva bp, que borra la
      a
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
       u                                   u
     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
                                     e
     esperaba ese argumento, pero para el int´rprete, hola no representa nada, ya que no
                                                 e
     fue definido como n´mero, ni palabra, ni lista, ni procedimiento.
                          u

     Listas: Se definen encerr´ndolas entre corchetes.
                             a

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

   Algunas primitivas tienen una forma general, esto es, pueden ser utilizadas con n´meros
                                                                                    u
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
               e                                                                   o
entre par´ntesis. Observa los ejemplos:
         e

                                            19
20                   CAP´
                        ITULO 4. CONVENCIONES ADOPTADAS PARA XLOGO


     escribe (suma 1 2 3 4 5)

devuelve:

     15

Tambi´n:
     e

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

devuelve:

     [a b] 1 [c d]

y

     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
         a
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.
                   e
Veamos un peque˜o ejemplo:
                 n

     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
                                        o           o

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




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

     4. En la ventana del Hist´rico de Comandos, debe aparecer el mensaje:
                              o
       Acaba de definir cuadrado El int´rprete XLogo no detecta los posibles errores
                                           e
       en este momento, sino cuando se utilice el procedimiento por primera vez.
4.3. EL CARACTER ESPECIAL                                                              21


  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
                           e
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)
                                                                                o
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 "xlogonxlogo        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.7). Para establecer como directorio de trabajo
                 o                    o
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´ interpretada como:
                              ıa
   c:Mis Documentos
y el int´rprete mostrar´ un mensaje de error.
        e              a
22                   CAP´
                        ITULO 4. CONVENCIONES ADOPTADAS PARA XLOGO


4.4.         May´ sculas y min´ sculas
                u             u
   XLogo no distingue entre may´sculas y min´sculas en el caso de nombres de procedi-
                                    u           u
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
                             e                              a           a
cuadrado. Por otro lado, XLogo s´ respeta may´sculas y min´sculas en listas y palabras:
                                    ı            u           u
     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:
                                                          o

4.5.1.       Operadores aritm´ticos
                             e
                      suma     diferencia    producto     divisi´n
                                                                o
                        +           -            *            /

4.5.2.       Operadores l´gicos
                         o
                                   o    y   iguales?
                                   |    &       =

Para comparaciones num´ricas, disponemos de cuatro operadores sin primitiva asociada:
                      e
      El operador “menor”: <

      El operador “mayor”: >
Por analog´ con otros lenguajes, XLogo incorpora otros dos:
          ıa
      El operador “menor o igual”: <=

      El operador “mayor o igual”: >=
si bien es evidente que no ser´ estrictamente necesarios:
                              ıan
      a <= b es equivalente a no (a >b)

      a >= b puede sustituirse por no (a <b)
4.6. LAS TILDES                                                                          23


   Nota aclarativa: 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

4.6.     Las tildes
   Desde la versi´n 0.9.92 las primitivas en espa˜ol XLogo admiten tildes. Trat´ndose de
                 o                               n                             a
un software para uso educativo, es importante que la ortograf´ sea la adecuada.
                                                             ıa

Para la acentuaci´n de las primitivas se siguen las normas ortogr´ficas habituales, espe-
                 o                                                a
cialmente en aquellas primitivas compuestas por varias palabras. Por ejemplo:

     poncolorl´piz. La palabra l´piz lleva tilde y la mantiene al formar parte de la
                a                   a
     primitiva, ya que la acentuaci´n de esta recae sobre la “a”
                                   o

     leelineaflujo. Aunque l´nea lleva tilde al ser esdr´jula, al pronunciar la primitiva
                                ı                       u
     completa, observamos que es una palabra llana (el acento se encuentra en la “u” de
     flujo), as´ que no se le asigna tilde.
               ı
     S´ que lleva tilde en definel´nea y finl´nea, por el mismo motivo explicado antes
      ı                           ı          ı
     para l´piz
           a

     Se procede del mismo modo en las formas cortas de las primitivas. Las formas cor-
     tas de definepol´gono y finpol´gono son, respectivamente, defpoli y finpoli.
                      ı             ı
     Escuchando a los alumnos pronunciarlas, se opt´ por considerarlas llanas y sin tilde.
                                                   o

   Dicho lo anterior, debemos tener una idea sobre la distinta codificaci´n de caracteres
                                                                        o
que usan los Sistemas Operativos.

    La codificaci´n de caracteres es el m´todo que convierte un car´cter de un lenguaje natu-
                o                       e                          a
ral en un c´digo num´rico. Es muy habitual (m´s de lo que ser´ deseable) que los sistemas
           o          e                         a               ıa
operativos (Windows, Linux, MacOS, Solaris, . . . ) usen distintos sistemas de codificaci´n.
                                                                                         o
Existen varias normas: ASCII, Unicode, UTF, ISO, . . . , y eso afecta negativamente a los
caracteres especiales del espa˜ol:
                              n

     Vocales acentuadas: ´, ´, ´ ´, u
                         a e ı, o ´

     Letras e˜e y “cedilla”: n y ¸
             n               ˜ c

     Apertura de exclamaci´n, interrogaci´n, . . . : ¿, ¡ , . . . .
                          o              o

    Si tienes intenci´n de compartir tus programas por Internet, intenta evitar estos carac-
                     o
teres y utiliza primitivas sin tilde. Si est´s en una aula, recomendamos el uso acentuado de
                                            a
las mismas.
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
                                           a
5.1.1.    Movimientos
    Esta primera tabla define las primitivas que gobiernan el movimiento de la tortuga, y
s´lo necesitan un argumento:
 o

   Primitivas       Argumentos                              Uso
                   n: n´mero de
                       u              Mueve la tortuga hacia adelante n pasos en la di-
 avanza, av
                   pasos              recci´n que actualmente est´ mirando.
                                           o                     a
                   n: n´mero de
                       u              Mueve la tortuga hacia atr´s n pasos en la direc-
                                                                 a
 retrocede, re
                   pasos              ci´n que actualmente est´ mirando.
                                        o                     a
 giraderecha,                         Gira la tortuga n grados hacia la derecha de la
                   n: ´ngulo
                      a
 gd                                   direcci´n que actualmente est´ mirando.
                                             o                     a
 giraizquierda,                       Gira la tortuga n grados hacia la izquierda de la
                   n: ´ngulo
                      a
 gi                                   direcci´n que actualmente est´ mirando.
                                             o                     a



   En esta segunda tabla el movimiento se controla mediante coordenadas en la pantalla.
Para ver mejor dichas coordenadas, se dispone de las primitivas cuadr´cula, 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 Area de dibujo
 cuadr´cula
      ı               a b: n´meros
                            u
                                         de dimensiones a x b y borra la pantalla
                                         Quita la cuadr´          ´
                                                        ıcula del Area de dibujo y borra
 borracuadr´cula
           ı          no
                                         la pantalla
 poncolorcuadr´cula primitiva,
              ı                          Establece el color de la cuadr´          ´
                                                                        ıcula del Area de
 pcc                lista o numero       dibujo
 colorcuadr´cula
           ı        no                   Devuelve el color actual de la cuadr´ ıcula.

                                          24
´
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES                                    25


    Primitivas         Argumentos                               Uso
                                         Dibuja los ejes cartesianos (X e Y) de escala
 ejes                 a: n´mero
                          u              (separaci´n entre marcas) a, con las etiquetas
                                                   o
                                         correspondientes.
                                         Dibuja el eje de abscisas (eje X) de escala (sepa-
 ejex                 a: n´mero
                          u              raci´n entre marcas) a, con las etiquetas corres-
                                             o
                                         pondientes.
                                         Dibuja el eje de ordenadas (eje Y) de escala
 ejey                 a: n´mero
                          u              (separaci´n entre marcas) a, con las etiquetas
                                                   o
                                         correspondientes.
                                                             ´
                                         Quita los ejes del Area de dibujo y borra la
 borraejes            no
                                         pantalla
                      primitiva,                                                  ´
                                         Establece el color de los ejes en el Area 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
                                                                      o
 centro               no
                                         coordenadas [0 0] con rumbo 0.
                                         Devuelve las coordenadas X e Y de la posici´n   o
 posici´n, pos
       o              no
                                         actual de la tortuga.
                      [x y]:             Mueve la tortuga a las coordenadas especifica-
 ponposici´n,
          o
                      lista de dos       das por los dos n´meros en la lista (x es la abs-
                                                           u
 ponpos
                      n´meros
                       u                 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
                                           e                                    u
 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.
                                                     a                  a



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

   Primitivas        Argumentos                               Uso
 rumbo              no                 Devuelve el rumbo o el ´ngulo de la tortuga.
                                                               a
                                       Orienta la tortuga en la direcci´n especificada. 0
                                                                        o
 ponrumbo, ponr     n: rumbo
                                       corresponde a mirar hacia arriba verticalmente.
                                       La lista debe contener dos n´meros que represen-
                                                                    u
                                       ten coordenadas. Devuelve el rumbo que la tortuga
 hacia              a: lista
                                       deber´ seguir hacia el punto definido por las coor-
                                             a
                                       denadas.
                                       La lista debe contener dos n´meros que represen-
                                                                    u
                                       ten coordenadas. Devuelve el n´mero de pasos des-
                                                                      u
 distancia          a: lista
                                       de la actual posici´n y el punto definido por las
                                                          o
                                       coordenadas.
26                                              CAP´
                                                   ITULO 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?
                   a                                e              a


   Primitivas          Argumentos                                 Uso
 muestratortuga,
                      no                   Hace que la tortuga se vea en pantalla.
 mt
 ocultatortuga,
                      no                   Hace invisible a la tortuga.
 ot
 bajal´piz, bl
       a              no                   La tortuga dibujar´ una l´
                                                             a      ınea cuando se mueva.
 subel´piz, sl
       a              no                   La tortuga no dibujar´ cuando se mueva.
                                                                a
 goma, go             no                   La tortuga borrar´ toda traza que encuentre.
                                                            a
 inviertel´piz,
          a
                      no                   Pone la tortuga en “modo inverso”, y l´piz abajo.
                                                                                 a
 ila
                                           Pone la tortuga en el modo normal de dibujo y
 ponl´piz, pla
     a                no
                                           l´piz abajo.
                                            a
                      a: n´mero,
                          u
 poncolorl´piz,
          a                                Cambia el color del l´piz. La especificaci´n del
                                                                   a                o
                      primitiva o
 poncl                                     color se detalla en la secci´n 5.1.4
                                                                       o
                      lista [r v a]
                                           Define el grosor del trazo del l´piz (en pixels). Por
                                                                          a
 pongrosor            n: n´mero
                          u
                                           defecto es 1. La forma es cuadrada.
 colorl´piz, cl
       a              a: lista             Devuelve el color actual del l´piz.
                                                                         a
 encuentracolor,                           Devuelve el color del punto definido por las coor-
                      a: lista
 ec                                        denadas.
 grosorl´piz,
        a
                      no                   Devuelve el grosor del l´piz.
                                                                   a
 gl
 ponformal´piz,
          a                                Fija la forma del l´piz: pfl 0: cuadrada; pfl 1:
                                                                a
                      n: 0 ´ 1
                           o
 pfl                                       ovalada.
 formal´piz, fl
       a              no                   Devuelve la forma del l´piz.
                                                                  a
                                           Puedes elegir tu tortuga preferida en la segunda
                                           etiqueta del men´ Herramientas → Preferen-
                                                              u
 ponforma,
                      n: n´mero
                          u                cias, pero tambi´n es posible con ponforma. El n´-
                                                             e                              u
 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-
                                                           u
 forma                no
                                           tual de la tortuga.



                    ´
     El control del Area de dibujo se realiza con las primitivas siguientes:

      Primitivas            Argumentos                              Uso
                           a: n´mero,
                               u
 poncolorpapel,                              Cambia el color del papel (fondo). La especifi-
                           primitiva o
 poncp                                       caci´n del color se detalla en la secci´n 5.1.4
                                                 o                                  o
                           lista [r v a]
´
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES                                       27


     Primitivas          Argumentos                               Uso
                                            Devuelve el color actual del “papel” (fondo, ´rea
                                                                                         a
 colorpapel             a: lista
                                            de dibujo).
 poncalidaddibujo,                          Fija la calidad del dibujo: pcd 0: normal; pcd
                        n: 0, 1 ´ 2
                                o
 pcd                                        1: alta; pcd 2: baja;
 calidaddibujo,
                        no                  Devuelve la calidad del dibujo
 cdib
 tama~opantalla,
     n                                      Devuelve una lista que contiene el tama˜o de la
                                                                                      n
                        no
 tpant                                      pantalla
 pontama~opantalla
        n                                   Fija el tama˜o de la pantalla. Ejemplo: ptp
                                                            n
                        a: lista
 ptp                                        [1000 1000]
                                            La tortuga puede salir del ´rea de dibujo (pero
                                                                         a
 modoventana            no
                                            no dibujar´ nada).
                                                        a
                                            Si la tortuga sale del ´rea de dibujo, vuelve a
                                                                    a
 modovuelta             no
                                            aparecer en el lado opuesto
                                            La tortuga queda confinada al ´rea de dibujo.
                                                                              a
                                            Si intenta salir, aparecer´ un mensaje de error
                                                                       a
 modojaula              no
                                            avisando cu´ntos pasos faltan para el punto de
                                                          a
                                            salida.
                                            Devuelve una lista con cuatro elementos, las
                                            coordenadas de la esquina superior izquierda y
 tama~oventana,
     n                                      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 Area de dibujo. En concreto,
                                            el valor de a es el factor de escala respecto a la
 zoom                   a: n´mero
                            u                                                  ´
                                            imagen original: (a>1) acerca el Area de dibujo;
                                                               ´
                                            (0<a<1) aleja el Area de dibujo.
 borrapantalla, bp                          Vac´ el ´rea de dibujo, situando a la tortuga
                                                 ıa   a
                        no
                                            en el centro de la pantalla.
                                            Vac´ el ´rea de dibujo, dejando a la tortuga en
                                                 ıa a
 limpia                 no
                                            el lugar donde estaba tras la ejecuci´n anterior.
                                                                                  o



    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.
                                           o                           o         a
                                         Devuelve, en p´ ıxels, la longitud que tendr´ en pan-
                                                                                     a
 largoetiqueta       a: lista
                                         talla la lista.
                                         Cuando se escribe con la primitiva rotula, mo-
 ponfuente, pf       n: n´mero
                         u               difica el tama˜o de la tipograf´ Por defecto, el
                                                         n                  ıa.
                                         tama˜o es 12.
                                               n
28                                         CAP´
                                              ITULO 5. LISTADO DE PRIMITIVAS


     Primitivas      Argumentos                               Uso
                                      Devuelve el tama˜o de la tipograf´ cuando se es-
                                                         n               ıa
 fuente            no
                                      cribe en pantalla con la primitiva rotula.
                                      Muestra una caja de di´logo con el mensaje que
                                                                a
 mensaje, msj      a: lista           est´ en la lista. El programa se detiene hasta que
                                         a
                                      el usuario hace un click en el bot´n “Aceptar”
                                                                        o
                                      Dibuja una circunferencia de radio n alrededor de
 c´rculo
  ı                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
                   a b: ´ngulos
                        a
                                      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´
                                  o        a           ıxels la longitud en pan-
      talla de la frase Hola, ¿c´mo est´s?
                                o      a

5.1.3.     La tortuga en Tres Dimensiones
   Desde la versi´n 0.9.92, nuestra tortuga puede dejar el plano para trasladarse a un
                  o
espacio en tres dimensiones (3D). Para cambiar a esta modalidad, Usaremos la primitiva
perspectiva. ¡Bienvenido a un mundo en 3D!
   Para recuperar el modo bidimensional (2D), debemos indicarle que vuelva a uno de los
modos “planos”: modojaula, modoventana o modovuelta.

La proyecci´n en perspectiva
           o
    Para representar un espacio 3D en un plano 2D, Xlogo utiliza una proyecci´n eno
perspectiva. Es equivalente a tener una c´mara grabando la escena en 3D, y mostrando en
                                         a
la pantalla la imagen de la proyecci´n. Veamos un esquema gr´fico para explicarlo mejor:
                                    o                        a




   Disponemos de primitivas para fijar la posici´n de la c´mara, mientras que la pantalla
                                               o         a
de proyecci´n se encuentra en el punto medio entre la c´mara y el objeto.
           o                                           a
´
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES                                   29


Entender la orientaci´n en el mundo tridimensional
                     o
    En el plano, la tortuga la orientaci´n se define unicamente por su rumbo. Sin embargo,
                                        o           ´
en el mundo tridimensional la orientaci´n de la tortuga necesita de tres ´ngulos. Si usamos
                                         o                               a
la orientaci´n por defecto de la tortuga en 3D (en el plano XY mirando hacia el semieje Y
            o
positivo):

Balanceo: la rotaci´n en torno al eje OY
                   o

Cabeceo: la rotaci´n seg´n el eje OX
                  o     u

Rumbo: la rotaci´n seg´n el eje OZ
                o     u

De hecho, para moverse en el mundo tridimiensional, la tortuga se comportar´ de modo
                                                                           a
muy similar a un avi´n. De nuevo, ilustremos con una imagen los 3 ´ngulos:
                    o                                             a




        Balanceo                        Cabeceo                          Rumbo

   Parece bastante complicado la primera vez que se estudia, pero veremos que muchas
cosas son similares a los movimientos en el plano bidimensional. Estas son las primitivas
b´sicas para moverse en el mundo 3D:
 a

     avanza, retrocede, av, re: Id´nticas al mundo 2D
                                  e

     giraderecha, giraizquierda, gd, gi: Id´nticas al mundo 2D, producen una rotaci´n
                                               e                                   o
     alrededor del eje transversal y vertical de la tortuga

     balanceaderecha, bd: la tortuga gira n grados a la derecha respecto a su eje longi-
     tudinal

     balanceaizquierda, bi: la tortuga gira n grados a la izquierda respecto a su eje
     longitudinal

     cabeceaarriba, subenariz, sn: La tortuga “sube el morro” n grados respecto a su
     eje transversal y horizontal

     cabeceaabajo, bajanariz, bn: La tortuga “baja el morro” n grados respecto a su eje
     transversal y horizontal

  En el plano bidimensional, para dibujar un cuadrado de 200 pasos de tortuga, escribi-
mos:

 repite 4 [ avanza 200 giraderecha 90 ]
30                                            CAP´
                                                 ITULO 5. LISTADO DE PRIMITIVAS


Estas ´rdenes siguen existiendo el mundo 3D, y el cuadrado puede dibujarse perfectamente
      o
en modo perspectiva.


     Si la tortuga baja “el morro” 90 grados, podemos
     dibujar otro cuadrado, y obtenemos:
     borrapantalla
     repite 4 [ avanza 200 giraderecha 90 ]
     bajanariz 90
     repite 4 [ avanza 200 giraderecha 90 ]


    Puedes (debes) probar otros ejemplos para entender perfectamente la orientaci´n de la
                                                                                 o
tortuga y el uso de los ´ngulos y ¡convertirte en un experto!
                        a

Tambi´n debes entender que las tres primitivas que controlan la rotaci´n en 3D est´n
       e                                                              o           a
relacionadas entre s´ por ejemplo, al ejecutar:
                    ı;
 borrapantalla
 balanceaizquierda 90 subenariz 90 balanceaderecha 90
El movimiento de la tortuga es equivalente a:
 giraizquierda 90
(Puedes probar con tu mano si no lo entiendes bien)

Primitivas disponibles tanto en 2D como 3D
   Las siguientes primitivas est´n disponibles tanto en el plano como en el mundo 3D. La
                                a
unica diferencia son los argumentos admitidos por las primitivas.
´

Estas precisan de los mismos argumentos que en el plano:
                          c´rculo
                           ı            arco           centro
                           ponx         pony           rumbo
                         ponrumbo      rotula      largoetiqueta
Las siguientes primitivas siguen esperando una lista como argumento, pero ahora debe con-
tener tres argumentos, correspondientes a las tres coordenadas de un punto en el espacio:
[x y z].
                         hacia              distancia       pos, posici´n
                                                                       o
                 ponpos, ponposici´n
                                  o           punto

Primitivas s´lo disponibles en 3D
            o
       ponxyz Esta primitiva mueve a la tortuga al punto elegido. Esta primitiva espera tres
       argumentos que representan las coordenadas del punto.
       ponxyz es muy similar a ponposici´n, pero las coordenadas no est´n escritos en una
                                        o                              a
       lista.
       Ejemplo, ponxyz -100 200 50 traslada a la tortuga hasta el punto x = -100; y =
       200; z = 50
´
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES                                    31


     ponz Esta primitiva mueve a la tortuga al punto de “altura” o “profundidad” (desco-
     nozco si el t´rmino applikate usado en Alemania tiene traducci´n al castellano m´s
                  e                                                 o                 a
     all´ de tercera coordenada) dada. ponz recibe un n´mero como argumento, de
        a                                                   u
     modo id´ntico a ponx y pony
             e

     ponorientaci´n Fija la orientaci´n de la tortuga. Esta primitiva espera una lista
                   o                 o
     que contiene tres n´meros: [balanceo cabeceo rumbo]
                        u
     Ejemplo: ponorientaci´n [100 0 58]: la tortuga tendr´ balanceo: 100 grados, ca-
                            o                            a
     beceo: 0 grados y rumbo: 58 grados.
     Por supuesto, el orden de los n´meros es importante. Si, por ejemplo, el valor de
                                     u
     la orientaci´n es [100 20 90], esto significa que si quieres esa misma orientaci´n
                 o                                                                   o
     partiendo del origen (despu´s de un borrapantalla, por ejemplo) deber´s escribir la
                                e                                         a
     siguiente secuencia:

        cabeceaderecha 100
        subenariz 20
        giraderecha 90

     Si en esta instrucci´n cambiamos el orden, no obtendremos la orientaci´n deseada.
                         o                                                 o

     orientaci´n Devuelve la orientaci´n de la tortuga en una lista que contiene: [balanceo
              o                       o
     cabeceo rumbo]

     ponbalanceo La tortuga gira en torno a su eje longitudinal y adquiere el ´ngulo de
                                                                              a
     balanceo elegido.

     balanceo Devuelve el valor actual del balanceo

     ponbalanceo La tortuga gira en torno a su eje transversal, y se orienta con el ´ngulo
                                                                                    a
     de cabeceo indicado.

     balanceo Devuelve el valor actual del cabeceo

Visor 3D
    XLogo incluye un visor 3D que permite visualizar los dibujos realizados en tres dimen-
siones. Este m´dulo usa las librer´ de Java3D, por lo tanto es necesario tener instalado
              o                   ıas
todo el Java3D.

Las reglas a tener en cuenta para utilizar el Visor 3D son:
                            e                ´
    Al crear una figura geom´trica sobre el Area de Dibujo, hay que indicar al Visor 3D qu´ e
formas desea grabar para una futura visualizaci´n. Es posible grabar pol´
                                                o                       ıgonos (superficies),
l´
 ıneas, puntos o texto. Para utilizar esta funci´n, las primitivas son:
                                                o
     empiezapol´gono, definepol´gono, defpoli: Los movimientos de la tortuga poste-
                  ı                ı
     riores a esta llamada se guardan para crear un pol´
                                                       ıgono.

     finpol´gono, finpoli: Desde la ejecuci´n de definepol´gono, la tortuga habr´
            ı                                   o                ı                       a
     pasado por varios v´rtices. Este pol´
                         e               ıgono se habr´ “registrado” y su color se definir´
                                                      a                                  a
     en funci´n del color de todos sus v´rtices.
             o                          e
     Esta primitiva finaliza el pol´
                                  ıgono.
32                                           CAP´
                                                ITULO 5. LISTADO DE PRIMITIVAS


       empiezal´nea, definel´nea, defl´nea: Los movimientos de la tortuga posteriores
                 ı              ı          ı
       a esta llamada se guardan para crear un quebrado, es decir, una l´
                                                                        ınea con varios
       v´rtices que no tiene por qu´ ser cerrada.
        e                          e

       finl´nea: Desde la ejecuci´n de definel´nea, la tortuga habr´ pasado por varios
            ı                      o              ı                     a
       v´rtices. Se guardar´ esta l´
        e                  a       ınea y su color se definir´ en funci´n del color de todos
                                                            a         o
       sus v´rtices.
            e
       Esta primitiva finaliza la definici´n del quebrado
                                        o

       empiezapunto, definepunto, defpto: Los movimientos posteriores de la tortuga
       definen los v´rices de un quebrado cuyos v´rtices se guardan para crear un conjunto
                   e                            e
       de puntos.

       finpunto, finpto: Esta primitiva finaliza la definici´n del conjunto de puntos.
                                                          o

       empiezatexto, definetexto, deftxt: Cada vez que el usuario muestre un texto sobre
          ´
       el Area de Dibujo con la primitiva rotula, se almacenar´ y luego ser´ representada
                                                              a            a
       por el visor 3D.

       fintexto, fintxt: Esta primitiva la grabaci´n de texto.
                                                  o

       vista3d, vistapol´gono Inicia el visor 3D, todos los objetos guardados se dibujan
                         ı
       en una nueva ventana.
       Disponemos de controles para mover la “c´mara” que muestra la escena:
                                               a

         • Para hacer rotar la imagen haciendo click con el bot´n izquierdo del rat´n y
                                                               o                   o
           arrastrando.
         • Para desplazar la imagen haciendo click con el bot´n derecho del rat´n y arras-
                                                             o                 o
           trando.
         • Para hacer zoom sobre la escena, usaremos la rueda del rat´n
                                                                     o

Dibujando un cubo
     Todas las caras miden 400 pasos de tortuga. El programa es:

para cuadrado
# Grabamos los v´rtices del cuadrado
                e
  empiezapol´gono
            ı
  repite 4 [ avanza 400 giraderecha 90 ]
  finpol´gono
        ı
fin

para cubosimple
# Cubo Amarillo
  borrapantalla perspectiva
  poncolorl´piz amarillo
           a
# Caras laterales
  repite 4
    [ cuadrado subel´piz
                    a
      giraderecha 90 avanza 400 giraizquierda 90
´
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES                                   33


      balanceaderecha 90 bajal´piz ]
                              a
# Parte inferior
  bajanariz 90 cuadrado subenariz 90
# Cara Superior
  avanza 400 bajanariz 90 cuadrado
# Visualizaci´n
             o
  vista3d
fin

   Estamos listos a ejecutar el comando: cubosimple:




   Al sustituir en el procedimiento cuadrado, empiezapol´gono por empiezal´nea, y
                                                        ı                 ı
finpoligono por finl´nea:
                      ı




   Si hubi´ramos usado empiezapunto y finpunto en lugar de empiezal´nea y finl´nea,
          e                                                        ı          ı
deber´
     ıamos ver en la pantalla s´lo los ocho v´rtices del cubo.
                               o             e

Estas primitivas son muy utiles para mostrar el conjunto de puntos en el espacio 3D.
                         ´

                          ´
En todos los casos, en el Area de Dibujo se muestran las aristas del cubo que luego se ver´
                                                                                          a
“macizo” con el Visor:
34                                           CAP´
                                                ITULO 5. LISTADO DE PRIMITIVAS


Efectos de luz y niebla
    Desde la versi´n 0.9.93 se pueden a˜adir efectos art´
                  o                    n                ısticos a las im´genes generadas en
                                                                        a
el Visor. Estos pueden ser efectos de luz y de niebla, y se accede a ellos con los botones
presentes en el visor 3D.




Efectos de luz
   Se pueden utilizar cuatro tipos de luz en las im´genes en tres dimensiones, a las que se
                                                   a
accede haciendo click en uno de los cuatro botones mostrados bajo la leyenda Iluminaci´n.
                                                                                        o

    Al trazar por primera vez una imagen en 3D s´lo se utilizan dos tipos de luz, ambos
                                                 o
Luz Puntual, pero pulsando en cualquiera de los cuatro botones de Iluminaci´n, aparece
                                                                             o
el siguiente cuadro de di´logo:
                         a




donde podemos elegir entre los siguientes tipos de luz:
Luz Ambiente: Luz uniforme de la que s´lo puede modificarse el color
                                      o
Luz Direccional: Se genera respecto a una direcci´n fija. Se parece a la luz ambiente
                                                   o
    cuando la fuente est´ muy lejos del objeto (por ejemplo, el sol)
                        a
Punto de Luz: La fuente est´ en una posici´n determinada, como en el caso de un faro.
                           a              o
Foco: Es como el punto de luz, pero el haz de luz se abre formando un cono cuya abertura
     debe fijarse.
La mejor forma de entenderlo, es practicar con ello.
´
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES                                 35


Efectos de niebla
   Se pueden a˜adir efectos de niebla en la imagen tridimensional. Pulsa el bot´n con
               n                                                               o
“nubes” y obtendr´s este cuadro de di´logo:
                 a                   a




Disponemos de dos tipos de niebla:

Niebla Lineal o progresiva: La imagen se va difuminando de modo lineal, pudiendo
    variar dos par´metros:
                  a

          La distancia a la que empieza la niebla
          La distancia a la que la niebla no deja ver nada (opacidad total)

Niebla Densa: La niebla es uniforme en toda la escena, y s´lo necesitamos especificar la
                                                          o
    densidad de la misma.

Este es un ejemplo con niebla lineal:




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

                 N´ mero
                  u            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]
36                                          CAP´
                                               ITULO 5. LISTADO DE PRIMITIVAS


                    N´ mero
                     u         Primitiva          [R V A]      Color
                       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]

                      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        marr´n
                                    o         [153 102 0]

Ejemplo: Estas tres ´rdenes son la misma:
                    o
   poncolorl´piz naranja
             a
   poncolorl´piz 13
             a
   poncolorl´piz [255 200 0]
             a
Veremos un ejemplo de su uso en la secci´n 13.7
                                        o

5.1.5.     Animaci´n
                  o
   Existen dos primitivas llamadas animaci´n y refresca (por compatibilidad con otras
                                          o
versiones de Logo se mantiene la forma en infinitivo refrescar) que permiten escribir
o
´rdenes sin que la tortuga las realice.


             Primitivas                               Uso
         animaci´n
                o               Se accede al modo de animaci´n.
                                                            o
                                Detiene el modo animaci´n, retornando al modo
                                                        o
         detieneanimaci´n
                       o
                                normal.
                                En modo de animaci´n, ejecuta las ´rdenes y ac-
                                                    o             o
         refresca
                                tualiza la imagen



    Mientras se escriben las ´rdenes en el modo de animaci´n (una c´mara de cine aparece
                             o                            o        a
                        o                        e                             ´
a la izquierda del Hist´rico de Comandos), ´stas no son ejecutadas en el Area de
Dibujo sino que son almacenadas en memoria hasta que se introduce la orden refresca.
´
5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES                                    37




Haciendo click en este icono, se detiene el modo de animaci´n, sin necesidad de usar la
                                                            o
primitiva detieneanimaci´n.
                          o
   Esto es muy util para crear animaci´nes o conseguir que los dibujos se realicen r´pida-
                ´                      o                                            a
mente.

5.1.6.    Propiedades del Hist´rico de Comandos
                              o
    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
    a            o                                                                   n
este ´rea, s´lo est´n disponibles para ser usadas por las primitivas escribe y tipea.
     a      o      a


     Primitivas        Argumentos                          Uso
                                                ´
                                       Borra el Area de comandos, y el ´rea del His-
                                                                       a
 borratexto, bt        no
                                       t´rico de comandos.
                                        o
                       a: n´mero,
                           u
                                       Muestra en el Hist´rico de Comandos el argu-
                                                          o
 escribe, es           palabra o
                                       mento indicado, a.
                       lista
 tipea,                a: n´mero,
                           u
                                       Id´ntico a escribe, pero el cursor queda en la l´
                                         e                                             ınea
 mecanograf´a
           ı           palabra o
                                       donde se mostr´ el contenido del argmento.
                                                      o
                       lista
                                       Define el tama˜o de la tipograf´ del ´rea del His-
                                                      n                 ıa     a
 ponfuentetexto,
                       n: n´mero
                           u           t´rico de comandos. S´lo disponible para ser
                                        o                          o
 pft
                                       usada por la primitiva escribe.
 fuentetexto,                          Devuelve el tama˜o de la tipograf´ usada por la
                                                          n                 ıa
                       no
 ftexto                                primitiva escribe.
                                       Define el color de la tipograf´ del ´rea del Hist´-
                                                                     ıa     a          o
 poncolortexto,        a: n´mero o
                           u
                                       rico de comandos. S´lo disponible para ser usada
                                                               o
 pctexto               lista
                                       por la primitiva escribe.
                                       Devuelve el color de la tipograf´ usada por la
                                                                           ıa
 colortexto            no              primitiva escribe en el ´rea del Hist´rico de
                                                                   a             o
                                       comandos.
                                       Selecciona la tipograf´ n´mero n para escribir en
                                                              ıa u
                                       el ´rea del Hist´rico de comandos con la primi-
                                          a            o
 ponnombrefuentetexto,
                   n: n´mero
                       u               tiva escribe. Puedes encontrar la relaci´n entre
                                                                                  o
 pnft
                                       fuente y n´mero en el men´ Herramientas →
                                                   u                 u
                                       Preferencias → Fuente.
                                       Devuelve una lista con dos elementos. El primero
                                       es un n´mero correspondiente a la fuente utilizada
                                               u
 nombrefuentetexto,
                    no                 para escribir en el ´rea del Hist´rico de coman-
                                                           a             o
 nft
                                       dos con la primitiva escribe. El segundo elemento
                                       es una lista que contiene el nombre de la fuente.
38                                              CAP´
                                                   ITULO 5. LISTADO DE PRIMITIVAS


      Primitivas         Argumentos                                 Uso
                                           Define los efectos de fuente para los comandos en el
                                           Hist´rico de comandos. Puedes elegir entre sie-
                                                o
                         lista o           te estilos: ninguno, negrita, cursiva, tachado,
 ponestilo, pest
                         palabra           subrayado, super´ndice y sub´ndice. 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.
                                           Determina la proporci´n de pantalla ocupada por
                                                                    o
                         n: n´mero
                             u                ´
                                           el Area de Dibujo y el Hist´rico de Coman-
                                                                             o
 ponseparaci´n,
            o                                                   ´
                         comprendido       dos. Si n vale 1, el Area de Dibujo ocupar´ toda a
 ponsep
                         entre 0 y 1       la pantalla. Si n vale 0, ser´ el Hist´rico quien la
                                                                        a          o
                                           ocupe.
                                           Devuelve el valor de la proporci´n de pantalla ocu-
                                                                              o
 separaci´n
         o               no                              ´
                                           pada por el Area de Dibujo y el Hist´rico de  o
                                           Comandos.



       Ejemplos de estilos de fuente:

       ponestilo [negrita subrayado] escribe "Hola
       Devuelve:
       Hola

       ponestilo "tachado mecanograf´a [Tachado] ponestilo "cursiva tipea " x
                                    ı
                        ponestilo "super´ndice escribe 2
                                        ı
       Devuelve:
       Tachado x2


5.2.          Operaciones aritm´ticas y l´gicas
                               e         o
     Esta es la lista de los operadores l´gicos :
                                         o

     Primitivas      Argumentos                                Uso
                                        Devuelve cierto si a ´ b son ciertos, si no, devuel-
                                                             o
          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
                                                          o
         no         a: booleano
                                        falso. Si a es falso, devuelve cierto.
´         ´
5.2. OPERACIONES ARITMETICAS Y LOGICAS                                               39


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

   Primitivas      Argumentos                              Uso
                   a b:
 suma, +           n´meros a
                    u               Devuelve el resultado de sumar a y b.
                   sumar
                   a b:
 diferencia, -     n´meros a
                    u               Devuelve el resultado de restar b de a.
                   restar
 cambiasigno,
                   a: n´mero
                       u            Devuelve el opuesto de a.
 cs
                   a b:
 producto, *                        Devuelve el resultado de multiplicar a por b
                   n´meros
                    u
                   a b:
 divisi´n, div,/
       o                            Devuelve el resultado de dividir a por b
                   n´meros
                    u
                   a b:
                                    Devuelve el resultado de la dividisi´n entera de a
                                                                        o
 cociente          n´meros
                    u
                                    entre b
                   enteros
                   a b:
 resto             n´meros
                    u               Devuelve el resto de la divisi´n de a por b
                                                                  o
                   enteros
 redondea          a: n´mero
                       u            Devuelve el entero m´s pr´ximo al n´mero a
                                                         a   o         u
 truncar,                           Devuelve el entero inmediatamente anterior al n´-
                                                                                   u
                   a: n´mero
                       u
 trunca                             mero a
                   a b:
 potencia                           Devuelve a elevado a la potencia b
                   n´meros
                    u
 exp               a: n´mero
                       u            Devuelve e (e = 2,71828183. . . ) elevado a a
 raizcuadrada,
                   a: n´mero
                       u            Devuelve la raiz cuadrada de a.
 rc
 logneperiano,
                   a: n´mero
                       u            Devuelve el logaritmo neperiano de a.
 ln
 log10, log        a:   n´mero
                         u          Devuelve el logaritmo decimal de a.
                   a:   n´mero
                         u
 seno, sen                          Devuelve el seno del n´mero a.
                                                          u
                   en   grados
                   a:   n´mero
                         u
 coseno, cos                        Devuelve el coseno del n´mero a.
                                                            u
                   en   grados
                   a:   n´mero
                         u
 tangente, tan                      Devuelve la tangente del n´mero a.
                                                              u
                   en   grados
 arcocoseno,
                   a: n´mero
                       u            Devuelve el ´ngulo, en grados, cuyo coseno vale a.
                                                a
 acos
 arcoseno, asen    a: n´mero
                       u            Devuelve el ´ngulo, en grados, cuyo seno vale a.
                                                a
 arcotangente,                      Devuelve el ´ngulo, en grados, cuya tangente vale
                                                a
                   a: n´mero
                       u
 atan                               a.
 pi                no               Devuelve el n´mero π (3.141592653589793)
                                                  u
                   a: n´mero
                       u            Devuelve un n´mero al azar mayor o igual que 0 y
                                                   u
 azar
                   entero           menor que a.
                                    Devuelve el valor absoluto (distinto de cero) del
 absoluto, abs     a: n´mero
                       u
                                    n´mero a
                                     u
40                                          CAP´
                                               ITULO 5. LISTADO DE PRIMITIVAS




      Ejemplos:

                       suma 40 60               devuelve     100
                       diferencia 100 60        devuelve     40
                       cambiasigno 5            devuelve     -5
                       cambiasigno -285         devuelve     285
                       divisi´n 3 6
                             o                  devuelve     0.5
                       cociente 3 6             devuelve     0
                       redondea 6.4             devuelve     6
                       potencia 3 2             devuelve     9

      Importante: Ten cuidado con las primitivas que requieren dos par´metros,
                                                                      a
      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
            e                      a           o                            a
      200). Y determinar´ que hay un solo par´metro (190) cuando esperaba dos, y
                          a                   a
      entonces generar´ un mensaje de error. Para evitar este tipo de problemas, se
                       a
      usa la primitiva “cambiasigno” para especificar un n´mero negativo:
                                                          u

           ponxy 200 cambiasigno 10

      aunque tambi´n es v´lido:
                  e      a

           ponxy 200 (-10)

   Como sabemos, la presencia de par´ntesis modifica el orden en que se deben reali-
                                       e
zar las operaciones. XLogo realiza las operaciones (como no pod´ ser de otra manera)
                                                               ıa
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.
           u
  Sin embargo, si escribimos:

     escribe (3 + 2) * 4

XLogo efectuar´ la suma antes que el producto, y el resultado ser´ 20.
              a                                                  a

   Hay que tener cuidado, y esto es muy importante, si se usan las primitivas suma,
diferencia, producto, divisi’on, potencia, . . . Por ejemplo, si queremos efectuar la
operaci´n 35 + 2 * 4 - 7, podr´
       o                      ıamos escribir:

     escribe potencia 3 5 + 2 * 4 - 7

pero observamos que XLogo devuelve:

     729
5.3. OPERACIONES CON LISTAS                                                              41


¿C´mo es posible? potencia espera dos par´metros, la base y el exponente, as´ que interpre-
   o                                         a                                 ı
ta que 3 es la base y el resto es el exponente, as´ que efect´a la operaci´n 5 + 2 * 4 - 7,
                                                  ı          u            o
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:
                           u

   (potencia 3 5) + 2 * 4 - 7

o bien:

   diferencia suma potencia 3 5 producto 2 4 7

que se entiende mejor usando par´ntesis:
                                e

   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
                                     e                    a
olvides que un programa debe ser entendible por otra persona.


5.3.      Operaciones con listas

 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.
                                                                           o
                    b lista
                    a b: a cualquiera,
 pon´ltimo, pu
    u                                        Inserta a en la ultima posici´n de la lista b
                                                             ´            o
                    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,
                            u
 elemento                               labra (1 se˜ala la primera letra). Si b es una lista,
                                                    n
                    b lista o palabra
                                        devuelve el elemento n´mero a de la lista.
                                                                u
                                        Si a es una lista, devuelve toda la lista menos el
 menos´ltimo,
      u
                    a: palabra o lista ultimo elemento. Si a es una palabra, devuelve la
                                         ´
 mu
                                        palabra sin la ultima 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.
42                                             CAP´
                                                  ITULO 5. LISTADO DE PRIMITIVAS


 Primitivas               Argumentos                             Uso
                                          Si a es una lista, devuelve el elemento de la lista.
 ´ltimo
 u                    a: palabra o lista Si a es una palabra, devuelve la ultima 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 posici´n n´mero n
                                                                                 o u
                      l1: lista
                                          la palabra o lista l2.
 agrega               n: n´mero
                          u
                                          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
                          u
                                          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
                                                                              u
 cuenta               a: palabra o lista de a. Si a es una lista, devuelve el n´mero de ele-
                                                                                u
                                          mentos de a.



     Para la primitiva miembro:

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

         • Si a est´ incluido en b, devuelve la sub-lista generada a partir de la primera
                   a
           aparici´n de a en b.
                  o
         • Si a no est´ incluido en b, devuelve la palabra falso.
                      a

       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.
                   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]
                pon´ltimo 5 [7 9 5]
                   u                           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.5. TRABAJANDO CON PROCEDIMIENTOS Y VARIABLES                                           43


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.
                                                                     u
                                      Devuelve cierto si a es un n´mero entero, falso
                                                                     u
 entero?           a: n´mero
                       u
                                      si no.
 lista?            a                  Devuelve cierto si a es una lista, falso si no.
                                      Devuelve cierto si a es una lista vac´ o una pa-
                                                                              ıa
 vac´o?
    ı              a
                                      labra vac´ falso si no.
                                                 ıa,
 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
                   a b: palabras
 anterior?                            orden alfab´tico, falso si no.
                                                    e
                                      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.
 bajal´piz?,
      a                               Devuelve la palabra cierto si el l´piz est´ abajo,
                                                                          a        a
                   cualquiera
 bl?                                  falso si no.
                                      Devuelve la palabra cierto si la tortuga est´ visi-
                                                                                     a
 visible?          cualquiera
                                      ble, falso si no.
 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,
                                                                                 a
 cuadr´cula?
      ı            no
                                      falso si no.
                                      Devuelve cierto si est´ activo el eje de abscisas
                                                                a
 ejex?             no
                                      (eje X), falso si no.
                                      Devuelve cierto si est´ activo el eje de ordenadas
                                                               a
 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.
44                                         CAP´
                                              ITULO 5. LISTADO DE PRIMITIVAS


     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
                                                                 n
       (ver secci´n 5.5.4)
                 o

       Cuerpo del procedimiento representa el conjunto de ´rdenes que conforman el pro-
                                                          o
       cedimiento

     Veamos un peque˜o ejemplo:
                    n

     para cuadrado
       repite 4 [
         avanza 100 giraderecha 90 ]
     fin

El procedimiento se llama cuadrado, y no admite nig´n argumento.
                                                   u
   Se pueden agregar comentarios, precedi´ndolos del signo #. En el ejemplo anterior:
                                           e

     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
                  a
ejemplos de procedimientos.
5.5. TRABAJANDO CON PROCEDIMIENTOS Y VARIABLES                                            45


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 pol´gono :v´rtices [:lado 100]
          ı         e
    repite :v´rtices
               e
     [ avanza :lado
       giraderecha 360/:v´rtices ]
                              e
fin
El procedimiento se llama pol´gono, lee una variable forzosa v´rtices que debe ser in-
                                ı                                 e
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
               u
    pol´gono 8
       ı
durante la ejecuci´n, la variable :lado se sutituye por su valor por defecto, esto es, 100, y
                  o
XLogo dibuja un oct´gono de lado 100.
                       o

Sin embargo, ejecuando
    (pol´gono 8 300)
         ı
XLogo dibuja un oct´gono de lado 300. Es importante fijarse en que ahora la ejecuci´n
                       o                                                                o
se realiza encerrando las ´rdenes entre par´ntesis. Esto indica al int´rprete que se van a
                           o               e                          e
usar variables opcionales.

5.5.5.     Conceptos acerca de variables
   Hay dos tipos de variables:

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

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

En esta implementaci´n del lenguaje Logo, las variables locales no son accesibles desde
                    o
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
                       a b: a palabra,
 haz                                   b. Si no, ser´ la variable global a la asignada
                                                     a
                       b cualquiera
                                       con el valor b.
                                       Crea una variable llamada a. Atenci´n: la varia-
                                                                               o
 local                 a: palabra      ble no es inicializada. Para asignarle un valor,
                                       hay que usar haz.
                       a b: a palabra, Crea una nueva variable llamada a y le asigna
 hazlocal
                       b cualquiera    el valor b.
                                       Define un nuevo procedimiento llamado
                       palabra1        palabra1, provisto de las variables conteni-
 define, def
                       lista2 lista3 das en lista2 y las instrucciones a ejecutar
                                       contenidas en lista3.
 borra, bo             a: palabra      Elimina el procedimiento cuyo nombre es a.
46                                             CAP´
                                                  ITULO 5. LISTADO DE PRIMITIVAS


      Primitivas         Argumentos                           Uso
                                          Reenv´ el valor de a. cosa "a y :a son nota-
                                                ıa
 cosa, objeto          a: palabra
                                          ciones equivalentes
 borravariable,
                       a: palabra         Elimina la variable a.
 bov
                                          Elimina todas las variables y procedimientos ac-
 borratodo,            no
                                          tuales.
                                          Enumera en una lista todos los procedimientos
 imts, listaprocs      no
                                          actualmente definidos.
 imvars, listavars                        Enumera en una lista todas las variables actual-
                       no
                                          mente definidas.
 listaspropiedades,                       Enumera en una lista todas las listas de propie-
                    no
 listasprop                               dades definidas.
                                          Devuelve una lista que contiene tres sub-listas:
                                          la primera con los procedimientos definidos, la
 contenido             no
                                          segunda con los nombres de las variables exis-
                                          tentes y la tercera con las liastas de propiedades.
                                          Ejecuta la lista de instrucciones contenida en la
 ejecuta               a: lista
                                          lista.




       Ejemplos:
       haz "a 100 asigna 100 a la variable a
       define "pol´gono [nlados largo]
                  ı
         [ repite :nlados
            [ avanza :largo giraderecha 360/:nlados ] ]
       Esto define un procedimiento llamado pol´gono con dos variables (:nlados y
                                                ı
       :largo), y permite trazar un pol´
                                       ıgono regular donde nlados es el n´mero de
                                                                         u
       lados, y largo su tama˜o.
                             n


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-
   a                                                    e
cedimientos est´n recibiendo correctamente los argumentos usando la primitiva devuelve.
                a

     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).
                              a
5.6. LISTAS DE PROPIEDADES                                                              47


   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.     Listas de Propiedades
    Desde la versi´n 0.9.92, pueden definirse Listas de Propiedades con XLogo. Cada lista
                  o
tiene un nombre espec´  ıfico y contiene varias parejas de “clave + valor”, que constan de
un identificador y del elemento en s´ Es decir, son listas cuyos elementos no se etiquetan
                                     ı.
mediante n´meros, sino con otro nombre.
           u

Por ejemplo, podemos considerar una lista de propiedades llamado “coche”, que contiene
la clave “color” asociado al valor “rojo”, y la clave “tipo” con el valor “4x4”.

   Para manejar estas listas, podemos utilizar los siguientes primitivas:

     ponpropiedad, ponprop
     Sintaxis: ponpropiedad nombre.lista clave valor
     A˜ade una propiedad a la lista de propiedades llamada nombre.lista. El valor ser´
       n                                                                             a
     accesible con la clave.
     Si no existe una lista de propiedades llamado nombre.lista entonces ser´ creada.
                                                                            a

     leepropiedad, leeprop, devuelvepropiedad
     Sintaxis: leepropiedad nombre.lista clave
     Devuelve el valor asociado a la clave de la lista de propiedades llamada nombre.lista.
     Si esta propiedad no existe o si no existe ninguna clave v´lida, devuelve una lista va-
                                                                 a
     c´
      ıa.

     borrapropiedad, boprop
     Sintaxis: borrapropiedad nombre.lista clave
     Elimina la correspondiente pareja clave-valor en la lista de propiedades nombre.lista

     listapropiedades, listaprop
     Sintaxis: listapropiedades nombre.lista
     Muestra todos los pares clave-valor que figuran en la lista de propiedades llamada
     listapropiedades
48                                           CAP´
                                                ITULO 5. LISTADO DE PRIMITIVAS


      borralistapropiedades, bolisprop
      Sintaxis: borralistapropiedades "nombre.lista o borralistapropiedades [ lista.de.nomb
      ]
      Borra la/s lista/s indicada/s con su nombre o en la lista

Vamos a volver a la lista de propiedades llamada “coche”.

# Llenado de      la Lista de Propiedades
ponpropiedad      "Coche "Color "Rojo
ponpropiedad      "Coche "Tipo "4x4
ponpropiedad      "Coche "Vendedor "Citroen

# Mostrar un valor
escribe leepropiedad "Coche "Color            ---> Rojo

# Mostrar todos los elementos
escribe listapropiedades "Coche               ---> Color Roja Tipo 4x4 Vendedor Citroen


5.7.      Manejo de archivos

     Primitivas        Argumentos                          Uso
                                  Lista el contenido del directorio actual. (Equiva-
 cat´logo, cat
    a            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, palabra o
                 a:
                                  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)
                                  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
                                                                    e
                 n: n´mero,
                     u
 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.
                                    u
                                  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
                     u
                                  del fichero
5.7. MANEJO DE ARCHIVOS                                                                   49


   Primitivas         Argumentos                                 Uso
                                         Abre el flujo cuyo identificador es n, despu´s lee
                                                                                       e
                                         un caracter del fichero. Esta primitiva devuelve el
 leecarflujo        n: n´mero
                        u
                                         n´mero correspondiente al caracter unicode (como
                                          u
                                         leecar - sec. 10.1)
                                         Escribe la l´ınea de texto indicada en l al princi-
                 n: n´mero,
                     u                   pio del fichero indicado por el flujo n. Atenci´n: la
                                                                                       o
 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,
                     u                   fichero indicado por el flujo n. Atenci´n: la escritu-
                                                                               o
 agregalineaflujo
                 l: lista                ra no se hace efectiva hasta que se ciera el fichero
                                         con cierraflujo.
 cierraflujo        n: n´mero
                        u                Cierra el flujo n.
                                         Devuelve cierto si se ha llegado al final del fichero,
 finflujo?          n: n´mero
                        u
                                         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 unicos formatos soportados son jpg y png.
                     o                            ´
La ruta debe especificarse previamente con pondirectorio y debe ser absoluta, empezando
en el nivel superior del ´rbol de directorios. Ejemplo:
                         a

   pondirectorio [/home/alumnos/mis imagenes]
   cargaimagen "turtle.jpg

     Ejemplos:

          guarda "trabajo.lgo [proc1 proc2 proc3] guarda en el directorio ac-
          tual un archivo llamado trabajo.lgo que contiene los procedimientos
          proc1, proc2 y proc3.
          guardatodo "trabajo.lgo guarda en el directorio actual un archivo lla-
          mado trabajo.lgo que contiene la totalidad de los procedimientos actual-
          mente definidos.

     En ambos casos, si no se indica la extensi´n .lgo, ser´ a˜adida. La palabra
                                                   o            a n
     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 trabajo.lgo,
     debes usar:

       borratodo carga "trabajo.lgo

     La palabra especifica una ruta relativa a partir del directorio corriente. No fun-
     ciona colocar una ruta absoluta.
50                                            CAP´
                                                 ITULO 5. LISTADO DE PRIMITIVAS


       Ejemplo 2:
       El objetivo es crear el fichero ejemplo en el directorio personal: /home/tu_nombre,
       en Linux, C:, en windows que contiene:
                          ~
             ABCDEFGHIJKLMNNOPQRSTUVWXYZ
             abcdefghijklm~nopqrstuvwxyz
                          n
             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~OPQRSTUVWXYZ]
                                                N
             escribelineaflujo 2 [abcdefghijklmn~opqrstuvwxyz]
                                                n
             escribelineaflujo 2 [0123456789]
             # cerramos el flujo para acabar la escritura
             cierraflujo 2

       Ahora, comprobamos que est´ bien escrito:
                                 a

           # 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


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

     1. El l´piz debe estar bajo (bl).
            a
´
5.8. FUNCION AVANZADA DE RELLENO                                                           51


  2. La tortuga no debe estar sobre un punto del mismo color que se usar´ para rellenar.
                                                                           a
     (Si quieres pintar rojo, la tortuga no puede estar sobre un punto rojo).
  3. Observar si cuadr´cula est´ o no activada.
                      ı        a
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
                                                                                        a
hasta llegar a una frontera de cualquier color (incluida la cuadr´
                                                                 ıcula).

                                         ´
Supongamos que tenemos este dibujo en el Area de Dibujo:




y tecleamos:
    poncolorl´piz 1
             a
    rellena
produce:




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

Sin embargo, si hacemos:
    poncolorl´piz 0
              a
    rellenazona
se obtiene:




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 semic´rculo de diametro :c
                    ı
52                                   CAP´
                                        ITULO 5. LISTADO DE PRIMITIVAS


  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
   subel´piz giraderecha 90 retrocede 150
        a
   giraizquierda 90 avanza 20 bajal´piz
                                   a
   repitepara [color 0 6]
    [ poncolorl´piz (6-:color) rellena
               a
      subel´piz giraderecha 90 avanza 20
           a
      giraizquierda 90 bajal´piz ]
                            a
fin




o bien, m´s realista:
         a
para arcoiris2
   borrapantalla ocultatortuga arcohueco 400
   subel´piz giraderecha 90 retrocede 150
         a
   giraizquierda 90 avanza 20 bajal´piz
                                    a
   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]
       [ poncolorl´piz elemento :colores :color rellena
                     a
        subel´piz giraderecha 90 avanza 20 giraizquierda 90 bajal´piz ]
              a                                                  a
fin
5.9. COMANDOS DE RUPTURA DE SECUENCIA                                              53




5.9.     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´ en un bucle repite o mientras, el programa sale del bucle
                a      ıdo
          inmediatamente.
        • Si est´ en un procedimiento, este es terminado.
                a

     detienetodo interrumpe total y definitivamente todos los procedimientos en ejecu-
     ci´n
       o

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

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

Condicionales

   La primitiva b´sica que define el condicional en XLogo es si. Su uso es simple:
                 a

   si expresi´n_l´gica [comandos]
             o   o

que ejecuta comandos unicamente cuando expresi´n_l´gica sea cierto, o bien:
                     ´                        o   o

   si expresi´n_l´gica [comandos1] [comandos2]
             o   o

donde comandos1 y comandos2 son, respectivamente, las ´rdenes a ejecutar en los casos en
                                                      o
los que expresi´n_l´gica sea cierto o falso.
               o   o
     Ejemplos:
          Procedimiento que compara un n´mero dado con 4 y contesta MAYOR si el
                                        u
          n´mero es mayor que 4:
           u
              para mayor :X
                si :x > 4 [escribe "MAYOR]
              fin
          Procedimiento que compara un n´mero con 4, para ver si es mayor que 4
                                        u
          o no lo es:
              para compara :X
                si :x > 4 [escribe "SI] [escribe "NO]
              fin
    Si queremos que los argumentos para cierto y falso est´n guardados en sendas varia-
                                                            e
bles, no podemos usar si. En este caso, la primitiva correcta es:
                                         sisino
En este ejemplo, XLogo mostrar´ un error:
                              a
  haz "Opcion_1 [escribe "cierto]
  haz "Opcion_2 [escribe "falso]
  si 1 = 2 :a :b
ya que la segunda lista nunca ser´ evaluada:
                                 a
¿Qu´ hacer con [escribe "falso]?
   e
   La sintaxis correcta es:

                                           54
55


  haz "Opcion_1 [escribe "cierto]
  haz "Opcion_2 [escribe "falso]
  sisino 1 = 2 :a :b

que devolver´:
            a

  "falso
Cap´
   ıtulo 7

Bucles y recursividad

   XLogo tiene cinco primitivas que permiten la construcci´n de bucles: repite, repitepara,
                                                          o
mientras, paracada y repitesiempre.


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
          u
ejecutarse. El int´rprete XLogo ejecutar´ la secuencia de comandos de la lista n veces.
                  e                     a
Esto evita copiar los mismos comandos repetidas veces.

Ejemplos:
   repite 4 [avanza 100 giraderecha 90]            # un cuadrado de lado 100

   repite 6 [avanza 100 giraderecha 60]            # un hex´gono de lado 100
                                                           a

   repite 360 [avanza 2 giraderecha 1]             # abreviando, casi un c´rculo
                                                                          ı


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
                  u                  o                              o     a
el 1)


  repite 3 [escribe cuentarepite]
  repite 3 [escribe contador]


proporcionan ambas

   1
   2
   3

                                          56
7.2. BUCLE CON REPITEPARA                                                                  57


7.2.      Bucle con repitepara
   repitepara hace el papel de los bucles for en otros lenguajes de programaci´n. Consiste
                                                                              o
en asignar a una variable un n´mero determinado de valores comprendidos en un intervalo
                              u
y con un incremento (paso) dados. Su sintaxis es:

   repitepara [ lista1 ] [ lista2 ]

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

     Ejemplo 1:

        repitepara [i 1 4] [escribe :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
                                                                                 u
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
                      e                      a                      o
todo el tiempo que lista_a_evaluar devuelva cierto.

Ejemplos:
58                                          CAP´
                                               ITULO 7. BUCLES Y RECURSIVIDAD


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

# Este ejemplo deletrea el alfabeto en orden inverso:
haz "lista1 "abcdefghijklmn~opqrstuvwxyz
                           n
mientras [no vac´o? :lista1]
                ı
   [escribe ´ltimo :lista1 haz "lista1 menos´ltimo :lista1]
            u                               u


7.4.       Bucle con paracada
     La sintacis de paracada es:

     paracada nombre_variable lista_o_palabra [ lista_de_comandos ]

La variable va tomando como valores los elementos de la lista o los caracteres de la palabra,
y las ´rdenes se repiten para cada calor adquirido.
      o
Ejemplos:

     paracada "i "XLogo
        [escribe :i]

muestra:

 X
 L
 o
 g
 o

     paracada "i [a b c]
        [escribe :i]

muestra:

 a
 b
 c

     haz "suma 0
     paracada "i 12345
        [haz "suma :suma+:i]

muestra:

 15

(la suma de los d´
                 ıgitos de 12345)
7.5. BUCLE CON REPITESIEMPRE                                                           59


7.5.     Bucle con repitesiempre
   Aunque un bucle como este es muy peligroso en programaci´n, ya vimos al explicar el
                                                            o
bucle mientras un ejemplo donde puede simularse un bucle infinito. La sintaxis es:
   repitesiempre [ lista_de_comandos ]
El ejemplo anterior ser´
                       ıa:
   repitesiempre [giraderecha 1] # La tortuga gira sobre si misma eternamente.
   De nuevo: Mucho cuidado al usar bucles infinitos


7.6.     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
                             a
    n! = n * (n - 1) * ...* 3 * 2* 1,
    podemos hacer:
                        n! =
                                          1 si n = 0
                                n · (n − 1)! si n = 0
                                                            ∀n ∈N
En XLogo:
para factorial :n´mero
                  u
   si :n´mero = 0
        u
    [ devuelve 1 ]
    [ devuelve :n´mero * factorial (:n´mero - 1) ]
                 u                    u
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
                                                                    a                   o
hay una tortuga disponible. Su n´mero es 0. Si quieres “crear” una nueva tortuga, puedes
                                  u
usar la primitiva pontortuga seguida del n´mero de la nueva tortuga. Para evitar confu-
                                             u
si´n, la nueva tortuga se crea en el centro y es invisible (tienes que usar muestratortuga
  o
para verla). As´ la nueva tortuga es la activa, y ser´ la que obedezca las cl´sicas primiti-
                ı,                                    a                       a
vas mientras no cambies a otra tortuga con pontortuga. El m´ximo n´mero de tortugas
                                                                  a       u
disponibles puede fijarse en el men´ Herramientas → Preferencias.
                                    u

   Estas son las primitivas que se aplican al modo multitortuga:

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




                                            60
Cap´
   ıtulo 9

Tocar m´ sica (MIDI)
       u

    Ya comentamos anteriormente (secci´n 3.3) que la versi´n para Windows de jre no in-
                                        o                  o
corpora las API (Application Programming Interface – Interfaz de Programaci´n de Aplica-
                                                                             o
ciones) que contienen los instrumentos y que deben ser instaladas manualmente (Preguntas
frecuentes, 15.1). Es importante recordarlo porque, si no lo haces, con la instalaci´n por
                                                                                    o
defecto de Java no tendr´s instrumentos disponibles.
                           a

   Las primitivas que nos ocupan son:

    Primitivas        Argumentos                              Uso
                                      Carga en memoria la secuencia inclu´ en la lista.
                                                                           ıda
 secuencia, sec         a: lista      Siguiendo a esta tabla, se indica c´mo escribir una
                                                                         o
                                      secuencia de notas m´sicales.
                                                            u
 tocam´sica
      u                    no         Toca la secuencia de notas en memoria.
 instrumento,                         Da el n´mero que corresponde al instrumento ac-
                                              u
                           no
 instr                                tualmente seleccionado.
                                      Queda seleccionado el instrumento n´mero a. Pue-
                                                                           u
 poninstrumento,                      des ver la lista de instrumentos disponibles en el
                       a: n´mero
                           u
 pinstr                               men´ Herramientas → Preferencias → Soni-
                                          u
                                      do.
 indicesecuencia,                     Da la posici´n del puntero en la secuencia corrien-
                                                  o
                        no
 indsec                               te.
 ponindicesecuencia,                  Pone el puntero en la posici´n a de la secuencia
                                                                    o
                     a: n´mero
                         u
 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
                 u
secuencia. Para crear una secuencia, puedes usar la primitiva sec o secuencia. Para crear
una secuencia v´lida, hay que seguir las siguientes reglas:
               a

     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 -

                                           61
62                                              CAP´               ´
                                                   ITULO 9. TOCAR MUSICA (MIDI)


      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.
           e                                               a               a

Por defecto, todas las notas tienen una duraci´n uno. Si quieres aumentar o disminuir la
                                              o
duraci´n, debes escribir un n´mero correspondiente.
      o                      u


      Ejemplos:

             secuencia [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).
           a                  o                           o                    a

      Otro ejemplo:




       para partitura
       # crea la secuencia de notas
         secuencia [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 ]
         secuencia [:+ 1 re 0.5 re do 1 :- si 0.5           la   si 1   :+   do re   2 :- la ]
         secuencia [:+ 1 re 0.5 re do 1 :- si 0.5           la   si 1   :+   do re   2 :- la ]
         secuencia [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 las primitivas:
                  u
   partitura tocam´sica.
                    u

Ahora veamos una aplicaci´n interesante de la primitiva ponindicesecuencia:
                         o

     borrasecuencia   #   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.
     tocam´sica
          u           #   Grandioso!

Tambi´n puedes elegir un instrumento con la primitiva poninstrumento o en el men´ He-
       e                                                                        u
rramientas → Preferencias → Sonido. Encontrar´s la lista de instrumentos disponibles
                                                    a
asociados a un n´mero. (Si usas Windows, echa un vistazo a las Preguntas Frecuentes si
                 u
no lo has hecho a´n)
                 u
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
                      o
trav´s de 3 primitivas: tecla?, leecar y leelista.
    e

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

     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 ultima tecla que haya sido pulsada.
                                     ´

     Estos son los valores que dan ciertas teclas:


          A → 65            B → 66             C → 67              ...            Z → 90
         → -37 ´ -226
               o           → -38 ´ -224
                                 o           → -39 ´ -227
                                                   o            → -40 ´ -225
                                                                       o
         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.
           e              a                                       a

     leelista [t´tulo] "palabra o leeteclado [t´tulo] "palabra: Presenta una ca-
                   ı                                   ı
     ja de di´logo titulada t´tulo. El usuario puede escribir un texto en el ´rea de entrada,
             a               ı                                               a
     y esta respuesta se guardar´ seleccionando autom´ticamente si en forma de n´mero
                                  a                     a                              u
     o de lista en la variable :palabra cuando se haga click en el bot´n OK.
                                                                        o

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

   Ejemplo:

    unicode "A                 devuelve          65
    caracter 125               devuelve          }

                                            63
64                               CAP´
                                    ITULO 10. RECIBIR ENTRADA DEL USUARIO


     Ejemplos:

           para edades
             leelista [¿Qu´ edad tienes?] "edad
                          e
             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
                                 o
   Durante la ejecuci´n del programa, se pueden recibir eventos del rat´n a trav´s de tres
                     o                                                 o        e
primitivas: leerat´n, rat´n? y posrat´n.
                  o      o            o

     leerat´n: el programa espera hasta que el usuario hace un click o un movimiento.
           o
     Entonces, devuelve un n´mero que representa ese evento. Los posibles valores son:
                            u

        • 0 → El rat´n se movi´.
                    o         o
        • 1 → Se hizo un click izquierdo.
        • 2 → Se hizo un click central (se usa en Linux).
        • 3 → Se hizo un click derecho.

     posrat´n: Da una lista que contiene la posici´n actual del rat´n.
           o                                      o                o

     rat´n?: Devuelve cierto o falso seg´n toquemos o no el rat´n desde que comienza
         o                              u                      o
     la ejecuci´n del programa
               o

Ejemplos:
   En este primer procedimiento, la tortuga sigue los movimientos del rat´n por la pantalla.
                                                                         o

para seguir
# cuando el rat´n se mueve, la tortuga cambia de posici´n
               o                                       o
    si leerat´n=0 [ponposici´n posrat´n]
             o              o        o
    seguir
fin
´
10.2. INTERACTUAR CON EL RATON                                                         65


Este segundo procedimiento es similar, pero hay que hacer click izquierdo para que la tor-
tuga se mueva.:

para seguir2
   si leerat´n = 1 [ponposici´n posrat´n]
            o                o        o
   seguir2
fin

En este tercer ejemplo, hemos creado dos botones rosa. Si hacemos click izquierdo, la
tortuga dibuja un cuadrado de lado 40. Si hacemos click derecho, la tortuga dibuja un
peque˜o c´
      n ırculo. Por ultimo si hacemos click derecho en el bot´n derecho, se detiene el
                     ´                                       o
programa.




para bot´n
        o
# crea un bot´n rectangular color rosa, de 50 x 100
              o
   repite 2 [
   avanza 50 giraderecha 90 avanza 100 giraderecha 90 ]
   giraderecha 45 subelapiz avanza 10
   bajal´piz poncolorl´piz [255 153 153]
        a             a
   rellena retrocede 10 giraizquierda 45 bajal´piz poncolorl´piz 0
                                              a             a
fin

para empieza
   borrapantalla bot´n subel´piz ponposici´n [150 0]
                    o       a             o
   bajal´piz bot´n subel´piz ponposici´n [30 20] bajal´piz
        a       o       a             o               a
   rotula "Cuadrado subel´piz ponposici´n [180 20]
                         a             o
   bajal´piz rotula ¸´rculo
        a           Cı
   subel´piz ponposici´n [0 -100] bajal´piz
        a             o                a
   rat´n
      o
fin

para rat´n
        o
# ponemos el valor de leerat´n en la variable ev
                            o
# ponemos la primera coordenada en la variable x
# ponemos la segunda coordenada en la variable y
66                              CAP´
                                   ITULO 10. RECIBIR ENTRADA DEL USUARIO


   haz "ev leerat´n
                 o
   haz "x elemento 1 posrat´n
                           o
   haz "y elemento 2 posrat´n
                           o
# 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] ]
   rat´n
      o
fin

para circunferencia
   repite 90 [avanza 1 giraizquierda 4]
   giraizquierda 90 subel´piz avanza 40 giraderecha 90 bajal´piz
                         a                                  a
fin

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


10.3.      Componentes Gr´ficos
                         a
                 o                         n                   a           ´
   Desde la versi´n 0.9.90, XLogo permite a˜adir componentes gr´ficos en el Area de di-
bujo (botones, men´s, . . . )
                   u

   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).
                a


10.3.1.    Crear un componente gr´fico
                                 a
   La secuencia de pasos que debes seguir es: Crear → Modificar sus propiedades o
                                  ´
        ısticas → Mostrarlo en el Area de dibujo.
caracter´

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

Crear un Men´
            u
   Disponemos de la primitiva menuigu, cuya sintaxis es:
# Esta primitiva crea un men´ llamado m
                                u
# y que contiene 3 opciones: opci´n1, opci´n2 y opci´n3
                                     o          o        o
menuigu "m [opci´n1 opci´n2 opci´n3]
                 o         o        o
´
10.3. COMPONENTES GRAFICOS                                                                67


Modificar las propiedades del componente gr´fico
                                          a
    posicionigu determina las coordenadas donde se colocar´ el elemento gr´fico. Por
                                                           a              a
ejemplo, para colocar el bot´n definido antes en el punto de coordenadas (20 , 100),
                            o
escribiremos:

posicionigu "b [20 100]

   Si no se especifica la posici´n, el objeto ser´ colocado por defecto en la esquina superior
                               o                a
              ´
izquierda del Area de dibujo.

Eliminar un componente gr´fico
                         a
   La primitiva eliminaigu elimina un componente gr´fico. Para eliminar el bot´n anterior
                                                   a                         o

eliminaigu "b

Definir acciones asociadas a un componente gr´fico
                                            a
   La primitiva accionigu, define una acci´n asociada al componente, y que se realizar´
                                         o                                           a
cuando el usuario interact´a con ´l.
                          u      e

# Que la tortuga avance 100 al pulsar el boton "b
accionigu "b [avanza 100 ]
# En el men´, cada opci´n indica su acci´n
           u           o                o
accionigu "m [[escribe "Opci´n1] [escribe "Opci´n2] [escribe "Opci´n3]]
                            o                  o                  o

Dibujar el componente gr´fico
                        a
                                                             ´
  La primitiva dibujaigu, muestra el componente gr´fico en el Area de dibujo. Para
                                                  a
mostrar el bot´n que estamos usando como ejemplo:
              o

dibujaigu "b




   Corrijamos el ejemplo anterior utilizando las nuevas primitivas:
para empieza
   botonigu "Boton.Circ "C´rculo
                              ı
   botonigu "Boton.Cuad "Cuadrado
   posicionigu "Boton.Circ [50 100]
   posicionigu "Boton.Cuad [-150 100]
   accionigu "Boton.Circ [ circunferencia ]
68                         CAP´
                              ITULO 10. RECIBIR ENTRADA DEL USUARIO


   accionigu "Boton.Cuad [ cuadrados ]
   dibujaigu "Boton.Circ
   dibujaigu "Boton.Cuad
fin

para circunferencia
   repite 90 [av 1 gi 4]
   giraizquierda 90 subel´piz avanza 40 giraderecha 90 bajal´piz
                         a                                  a
fin

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

Gesti´n de tiempos
     o

   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).
       o                   u

   Primitivas       Argumentos                                 Uso
                   n: n´mero
                       u              Hace una pausa en el programa, la tortuga espera
 espera
                   entero             (n/60) segundos.
                                      Inicia un conteo descendiente de n segundos. Para
 cron´metro,
     o             n: n´mero
                       u
                                      saber que la cuenta ha finalizado, disponemos de
 crono             entero
                                      la primitiva fincrono?
 fincron´metro?,
        o                             Devuelve "cierto si no hay ning´n conteo activo.
                                                                          u
                 no
 fincrono?                            Devuelve "falso si el conteo no ha terminado.
                                      Devuelve una lista compuesta de 3 n´meros ente-
                                                                             u
                                      ros que representan la fecha del sistema. El primero
 fecha             no
                                      indica el d´ el segundo el mes y el ultimo el a˜o.
                                                  ıa,                       ´          n
                                      [d´a mes a~o]
                                         ı          n
                                      Devuelve una lista compuesta de 3 n´meros ente-
                                                                             u
                                      ros que representan la hora del sistema. El primero
 hora              no
                                      representa las horas, el segundo los minutos y el ul-
                                                                                        ´
                                      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 ]

                                          69
70                                      CAP´              ´
                                           ITULO 11. GESTION DE TIEMPOS


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

Utilizaci´n de la red con XLogo
         o

12.1.      La red: ¿c´mo funciona eso?
                     o
   En primer lugar es necesario explicar los conceptos b´sicos de la comunicaci´n en una
                                                        a                      o
red para usar correctamente las primitivas de XLogo.




                                  Figura: noci´n de red
                                              o

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

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

   No nos extendamos m´s sobre el significado de estos n´meros. A˜adamos unicamente
                          a                             u          n        ´
una cosa que es interesante saber, el ordenador local en el cual se trabaja tambi´n se
                                                                                  e
identifica por una direcci´n: 127.0.0.1. El nombre que se asocia con ´l es habitualmente
                         o                                           e
localhost.


12.2.      Primitivas orientadas a la red
   XLogo dispone de 4 primitivas que permiten comunicarse a trav´s de una red: escuchatcp,
                                                                e
ejecutatcp, chattcp y enviatcp.
   En los ejemplos siguientes, mantendremos el esquema de red de la subsecci´n anterior.
                                                                            o

                                            71
72                        CAP´                  ´
                             ITULO 12. UTILIZACION DE LA RED CON XLOGO


     escuchatcp: esta primitiva es la base de cualquier comunicaci´n a trav´s de la red.
                                                                  o        e
     No espera ning´n argumento. Permite poner al ordenador que la ejecuta a la espera
                    u
     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-
                                                                           o
     bre del ordenador de destino (el que va a ejecutar las ´rdenes), la lista contiene las
                                                            o
     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 "192.168.2.2 [repite 4 [avanza 100 giraderecha 90]]

     o

         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.
                                       o
     Sintaxis: chattcp palabra lista → La palabra indica la direcci´n IP o el nombre
                                                                        o
     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 "192.168.1.2 [buenos d´as].
                                                                ı
     Una ventana se abre en cada uno de los ordenadores para permitir la conversaci´n
                                                                                   o

     enviatcp: env´ datos hacia un ordenador de la red.
                  ıa
     Sintaxis: enviatcp palabra lista → La palabra indica la direcci´n IP o el nom-
                                                                          o
     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
                                                               a             a
     una variable o mostrarse en el Hist´rico de comandos.
                                          o

     Ejemplo: tortuga quiere enviar a liebre la frase "3.14159 casi el n´mero pi".
                                                                           u
     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],
                                                                            u
     liebre mostrar´ la frase, pero en tortuga aparecer´ el mensaje:
                     a                                 a
     ¿Qu´ hacer con [ Si ] ?
         e
     Deber´ıamos escribir:
     es enviatcp "liebre [3.14159 casi el n´mero pi]
                                                 u
     o
     haz "respuesta enviatcp "liebre [3.14159 casi el n´mero pi]
                                                               u
     En el primer caso, el Hist´rico de comandos mostrar´ Si, y en el segundo "respuesta
                               o                         a
     contendr´ la lista [ Si ], como podemos comprobar haciendo
              a
     es lista? :respuesta
12.2. PRIMITIVAS ORIENTADAS A LA RED                                                   73


     cierto
     es :respuesta
     Si

     Con esta primitiva se puede establecer comunicaci´n con un robot did´ctico a trav´s
                                                       o                   a            e
     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.
         a

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

     En la primera ventana, ejecuta escuchatcp.

     En la segunda, ejecuta

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

¡As´ puedes mover a la tortuga en la otra ventana! (¡Ah s´ esto es as´ porque 127.0.0.1
   ı                                                       ı!,       ı
indica tu direcci´n local, es decir, de tu propio ordenador)
                 o
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
 subel´piz
      a
 giraizquierda 30
 retrocede (:c*20)
 giraderecha 90
 avanza (:c*22)
 giraizquierda 90
 bajal´piz
      a
fin

para casas
 borrapantalla
 ocultatortuga
 subel´piz
      a
 giraizquierda 90
 avanza 200
 giraderecha 90
 bajal´piz
      a
 repitepara [n 3 7 2]
   [ casa :n colocar :n ]
 casa 10
fin

                                      74
´       ´
13.2. DIBUJAR UN RECTANGULO SOLIDO        75




13.2.    Dibujar un rect´ngulo s´lido
                        a       o
  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

  para factorial :n
    si :n = 1
     [devuelve 1]
     [devuelve :n * factorial (:n - 1)]
  fin
76                                    CAP´
                                         ITULO 13. EJEMPLOS DE PROGRAMAS


      Ejemplo:

            escribe factorial 5 --> 120.0
            escribe factorial 6 --> 720.0


13.4.      Copo de nieve (Gracias a Georges No¨l)
                                              e
     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




13.5.      Escritura
     para escribir
       ocultatortuga
´    ´
13.6. CONJUGACION (SOLO VERBOS REGULARES)         77


    repite 40 [
      avanza 30
      giraderecha 9
      poncolorlapiz azar 7
      rotula [XLogo es genial!] ]
  fin




13.6.      Conjugaci´n (s´lo verbos regulares)
                    o    o
13.6.1.    Primera versi´n
                        o
    para   futuro :verbo
      es   frase "yo palabra :verbo "´
                                     e
      es   frase "t´ palabra :verbo "´s
                   u                 a
      es   frase "´l palabra :verbo "´
                  e                  a
      es   frase "nosotros palabra :verbo "emos
      es   frase "vosotros palabra :verbo "´is
                                           e
      es   frase "ellos palabra :verbo "´n
                                        a
    fin


    Ejemplo: futuro "amar
    yo amar´
           e
    t´ amar´s
     u     a
    e
    ´l amar´
           a
    nosotros amaremos
    vosotros amar´is
                 e
    ellos amar´n
              a
78                                    CAP´
                                         ITULO 13. EJEMPLOS DE PROGRAMAS


13.6.2.    Segunda versi´n
                        o
     para futuro :verbo
       haz "pronombres [yo t´ ´l nosotros vosotros ellos]
                            u e
       haz "terminaciones [´ ´s ´ emos ´is ´n]
                           e a a       e   a
       repitepara [i 1 6]
        [ es fr elemento :i :pronombres palabra :verbo elemento :i :terminaciones ]
     fin

     Ejemplo: futuro "amar
     yo amar´
            e
     t´ amar´s
      u     a
     e
     ´l amar´
            a
     nosotros amaremos
     vosotros amar´is
                  e
     ellos amar´n
               a

13.6.3.    Tercera versi´n (con recurrencia)
                        o
     para futuro :verbo
       haz "pronombres [yo t´ ´l nosotros vosotros ellos]
                            u e
       haz "terminaciones [´ ´s ´ emos ´is ´n]
                           e a a       e   a
       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´
            e
     t´ amar´s
      u     a
     e
     ´l amar´
            a
     nosotros amaremos
     vosotros amar´is
                  e
     ellos amar´n
               a


13.7.      Colores
13.7.1.    Introducci´n
                     o
    Primero, algunas aclaraciones: Habr´s visto en la secci´n 5.1.4 que el comando poncl
                                       a                   o
puede tomar como argumento tanto un n´mero como una lista. Aqu´ nos centraremos en
                                         u                           ı
codificar valores RVA. Cada color en XLogo est´ codificado usando tres valores: rojo,
                                                  a
verde y azul, de ah´ RVA (RGB en ingl´s).
                   ı                  e
    Estos tres n´meros conforman una lista que es argumento de la primitiva poncl, por
                u
lo que representan respectivamente los componentes rojo, verde y azul de un color. Esta
13.7. COLORES                                                                            79


manera de codificar no es muy intuitiva, as´ que para tener una idea del color que obtendr´s
                                            ı                                             a
puedes usar la caja de di´logo Herramientas → Elegir color del l´piz.
                           a                                            a
   Sin embargo, usando esta forma de codificar colores, se hace muy f´cil transformar una
                                                                        a
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:
                                          a
(0 + 100 + 80)/3 = 60, y asignamos el color [60 60 60] a este punto. Esta operaci´n      o
debe ser realizada para cada punto de la imagen.

13.7.2.     Pr´ctica: Escala de grises
              a
   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:
                                     ı    a                                   o
   http://xlogo.tuxfamily.org/images/transfo.png
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´
                                    a                                                  ı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
                                                        a
tres [r v a] valores. Aqu´ est´ el c´digo principal: (No olvides cambiar la ruta del archivo
                          ı a       o
en el procedimiento!)

para transform
# Debes cambiar la ruta de la imagen transfo.png
# Ej: cargaimagen [/home/usuario/imagenes/transfo.png]
  borrapantalla ocultatortuga
  pondirectorio "/home/usuario/imagenes
  cargaimagen "transfo.png
  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
  haz "v primero :lista1
  haz "lista1 menosprimero :lista1
  haz "a primero :lista1
  haz "color redondea (:r+:v+:a)/3
80                                     CAP´
                                          ITULO 13. EJEMPLOS DE PROGRAMAS


  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
                                                          u
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 unicamente el pro-
                            o                                            ´
cedimiento pixel, pero veamos un procedimiento recursivo:

para transform2
# Debes cambiar la ruta de la imagen transfo.png
# Ej: c:Mis DocumentosMis imagenestransfo.png
  borrapantalla
  ocultatortuga
  pondirectorio "c:Mis DocumentosMis imagenes
  cargaimagen "transfo.png
  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
  haz "v primero :lista1
  haz "lista1 menosprimero :lista1
  haz "a primero :lista1
  devuelve frase (255 - :r) frase (255 - :v) (255 - :a)
13.8. LISTAS (GRACIAS A OLIVIER SC)                           81


fin




13.8.     Listas (Gracias a Olivier SC)
  Supongo que apreciar´s este hermoso programa:
                      a
  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
           165 mas 561 igual a 726
           726 mas 627 igual a 1353
           1353 mas 3531 igual a 4884
           4884
82                                   CAP´
                                        ITULO 13. EJEMPLOS DE PROGRAMAS


13.9.      Un lindo medall´n
                          o
     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 XLogo.jar y
el archivo de configuraci´n .xlogo que se encuentra en /home/tu_nombre en Linux, o
                        o
c:windows.xlogo en Windows.


14.2.      El sitio
   Para conseguir la ultima versi´n y correcci´n de errores, visita el sitio de XLogo de
                     ´           o            o
vez en cuando:

   http://xlogo.tuxfamily.org

Si´ntete libre de contactar al autor si tienes alg´n problema con la instalaci´n o el uso.
  e                                               u                           o
Toda sugerencia ser´ bienvenida.
                    a


14.3.      Acerca de este documento
XLogo: Manual del Usuario
     Original en franc´s revisado por Lo¨ (18 de Febrero de 2008).
                      e                 ıc

                      n                          ´
     Traducido al espa˜ol por Marcelo Duschkin y Alvaro Vald´s (14 de junio de 2008)
                                                            e

     Kevin Donnelly: traducci´n al ingl´s del manual, y traducci´n al gal´s del programa.
                             o         e                        o        e

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

     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.
         n                          o                         o




                                           83
Cap´
   ıtulo 15

Carnaval de Preguntas – Artima˜ as –
                              n
Trucos que conocer

15.1.      Preguntas frecuentes
Por m´s que borro un procedimiento en el Editor, reaparece todo
       a
el tiempo!
    Cuando se sale del Editor, ´ste se limita unicamente a guardar o poner al d´ los
                                  e           ´                                ıa
procedimientos definidos en ´l. La unica forma de borrar un procedimiento en XLogo es
                             e      ´
utilizar la primitiva borra o bo.
    Ejemplo: borra "toto → borra el procedimiento toto

¿C´mo hago para escribir r´pidamente una orden utilizada pre-
   o                      a
viamente?
     Primer m´todo: con el rat´n, haz click en la zona del Hist´rico sobre la l´
              e               o                                o               ınea deseada.
     As´ reaparecer´ inmediatamente en la L´
       ı           a                          ınea de Comando
     Segundo m´todo: con el teclado, las flechas Arriba y Abajo permiten navegar por la
                 e
     lista de los comandos anteriores (m´s pr´ctico)
                                        a    a

En la opci´n Sonido del cuadro de di´logo Preferencias, no hay
           o                        a
disponible ning´ n instrumento
               u
    Como dec´ ıamos en la secci´n 3.3, esto se debe a que la versi´n de Java para Windows
                               o                                  o
no incluye los bancos de sonido, y deben instalarse manualmente.
    En primer lugar, hay que descargarlos desde:
http://java.sun.com/products/java-media/sound/soundbank-min.gm.zip
la versi´n m´
        o    ınima (unos 350 kb),
http://java.sun.com/products/java-media/sound/soundbank-mid.gm.zip
la versi´n intermedia (algo m´s de 1 Mb) y
        o                     a
http://java.sun.com/products/java-media/sound/soundbank-deluxe.gm.zip
la versi´n de luxe (casi 5 Mb).
        o

   Una vez descargados, debemos descomprimirlos en el directorio audio de la instalaci´n
                                                                                      o
Java que, dependiendo de la versi´n, puede ser:
                                 o

                                            84
15.1. PREGUNTAS FRECUENTES                                                              85


 C:Archivos de programaJavajre1.6.0libaudio

creando el directorio audio si ´ste no existe.
                               e

Hecho esto, la lista de instrumentos estar´ disponible.
                                          a


Tengo problemas de refresco de pantalla cuando la tortuga dibuja!
   Problema tambi´n conocido y t´
                    e              ıpico de JRE >1.4.2. intentar´ ponerle remedio en lo
                                                                 e
sucesivo, quiz´ pueda hacer algo. Dos soluciones por el momento:
              a

     Minimizar la ventana y volver a aumentarla (restaurarla)

     Utilizar siempre la versi´n m´s moderna de Java.
                              o   a


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


Utilizo la versi´n en Espa˜ ol, y no puedo utilizar las primitivas
                o          n
animacion, division, separacion y ponseparacion
   Corregido desde la versi´n 0.9.20e. Para versiones anteriores de XLogo:
                           o

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

     division, separacion y ponseparacion se escriben con tilde: divisi´n, separaci´n
                                                                       o           o
     y ponseparaci´n.
                   o

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


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:
                                o

     Utiliza la versi´n xlogo-new.jar tambi´n disponible en nuestra web.
                     o                     e

     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 xlogo.jar.
86CAP´                                       ˜
     ITULO 15. CARNAVAL DE PREGUNTAS – ARTIMANAS – TRUCOS QUE CONOCER


15.2.     ¿C´mo puedo ayudar?
            o
    Inform´ndome de todos los errores (“bugs”) que encuentres. Si puedes reproducir
          a
    sistem´ticamente un problema detectado, mejor a´n
          a                                        u

    Toda sugerencia dirigida a mejorar el programa es siempre bienvenida

    Ayudando con las traducciones, en particular el ingl´s . . .
                                                        e

    Las palabras de ´nimo siempre vienen bien
                    a
´
Indice alfab´tico
            e

#, 44                       Argumentos, 19
π, 39                       Argumentos Opcionales, 19
*, 39                       asen, 39
+, 39                       Aspecto, 14
-, 39                       atan, 39
/, 39                       av, 24, 29
<, 22                       avanza, 24, 29
<=, 22                      Ayuda, 17
=, 23                       azar, 39
>, 22                       azul, 36
>=, 22                      azuloscuro, 36
?, 43
&, 23                       backslash, 21
, 21                      bajal´piz, 26
                                  a
n, 21                      bajal´piz?, 43
                                  a
 , 21                      bajanariz, 29
3d, 28                      balanceaderecha, 29
                            balanceaizquierda, 29
abreflujo, 48               balanceo, 31
Abrir, 11                   Barra invertida, 21
absoluto, 39                bd, 29
abs, 39                     bi, 29
accionigu, 67               bl, 26
Acentuaci´n y tildes, 23
          o                 bl?, 43
Acerca de ..., 18           blanco, 36
acos, 39                    bn, 29
adi´s, 12
   o                        bo, 45
agrega, 42                  bolisprop, 48
agregalineaflujo, 49        Booleano, 38
Alto, 7                     boprop, 47
alto, 53                    borra, 9, 45
amarillo, 35                borracuadr´cula, 24
                                        ı
Animaci´n, 36
        o                   borraejes, 25
animaci´n, 36
        o                   borralistapropiedades, 48
anterior?, 43               borrapantalla, 27
antes?, 43                  borrapropiedad, 47
arco, 28, 30                Borrar procedimientos, 9, 14
arcocoseno, 39              borrasecuencia, 61
arcoseno, 39                borratexto, 37
arcotangente, 39            borratodo, 9, 46
´
Area de Dibujo, 7           borravariable, 46

                           87
88                                                     ´           ´
                                                       INDICE ALFABETICO


bos, 61                             cos, 39
botonigu, 66                        cosa, 46
bov, 46                             Coseno, 39
bp, 27                              coseno, 39
bt, 37                              cron´metro, 69
                                         o
Bucles, 56                          crono, 69
                                    cs, 39
c´rculo, 28, 30
 ı                                  Cuadr´ ıcula, 15
cabeceabajo, 29                     cuadr´cula, 24
                                          ı
cabecearriba, 29                    cuadr´cula?, 43
                                          ı
cabeceo, 31                         cuadricula, 15
Calidad del dibujo, 16              cuenta, 42
calidaddibujo, 27                   cuentarepite, 56
cambiadirectorio, 48                cursiva, 38
cambiasigno, 39                     cyan, 36
car, 63
caracter, 63                        def, 45
carga, 48                           define, 45
cargaimagen, 49                     definel´nea, 32
                                            ı
cat, 48                             definepol´gono, 31
                                               ı
cat´logo, 48
    a                               definepunto, 32
cd, 48                              definetexto, 32
cdib, 27                            Definir archivos de inicio, 13
centro, 25, 30                      defl´nea, 32
                                         ı
chattcp, 72                         defpoli, 31
ci, 49                              defpto, 32
cierraflujo, 49                     deftxt, 32
cierto, 43                          Desinstalar, 83
cl, 26                              detieneanimaci´n, 36
                                                    o
cociente, 39                        detienecuadricula, 15
Color de l´piz predeterminado, 15
          a                         detieneejes, 15
Color de papel predeterminado, 15   detienetodo, 53
colorcuadr´cula, 24
            ı                       dev, 53
colorejes, 25                       devuelve, 46, 53
Colores, 35                         devuelvepropiedad, 47
Colores (ejemplo), 78               dibujaigu, 67
colorl´piz, 26
       a                            diferencia, 22, 39
colorpapel, 27                      dir, 48
colortexto, 37                      directorio, 48
Comando de Inicio, 7                distancia, 25, 30
Comandos, 19                        div, 39
Comentarios, 44                     divisi´n, 22, 39
                                           o
Condicionales, 54
contador, 56                        ec, 26
contenido, 46                       ed, 7, 20
Convenciones, 19                    Edici´n, 12
                                         o
Copiar, 7, 12                       edita, 7
Copo de nieve, 76                   Editar, 7
Cortar, 7, 12                       editatodo, 7
´           ´
INDICE ALFABETICO                                             89


Editor de Procedimientos, 7   fl, 26
edtodo, 7                     Foco, 34
Efectos de luz y niebla, 34   forma, 26
ejecuta, 46                   Forma del l´piz, 16
                                         a
ejecutatcp, 72                formal´piz, 26
                                     a
ejes, 15, 25                  fr, 41
Ejes cartesianos, 15          frase, 41
ejex, 15, 25                  ftexto, 37
ejex?, 43                     Fuente, 16
ejey, 15, 25                  fuente, 28
ejey?, 43                     fuentetexto, 37
Elegir color del l´piz, 13
                  a           Funciones trigonom´tricas, 39
                                                  e
Elegir color del papel, 13
elemento, 41                  gd, 24, 29
elige, 41                     Gesti´n de tiempos, 69
                                   o
eliminaigu, 67                gi, 24, 29
eliminatortuga, 60            giraderecha, 24, 29
empiezal´nea, 32
          ı                   giraizquierda, 24, 29
empiezapol´gono, 31
             ı                gl, 26
empiezapunto, 32              go, 26
empiezatexto, 32              goma, 26
encuentracolor, 26            gris, 36
entero?, 43                   grisclaro, 36
enviatcp, 72                  grosorl´piz, 26
                                       a
es, 37                        guarda, 48
escribe, 37                   Guardar, 11
escribelineaflujo, 49         Guardar como ..., 11
escuchatcp, 72                Guardar en formato RTF, 12
Espacios, 21                  Guardar imagen como. . . , 12
espera, 69                    guardatodo, 48
esquinasventana, 27
estilo, 38                    hacia, 25, 30
exp, 39                       haz, 45
                              hazlocal, 45
Factorial, 46, 75             Hist´rico de Comandos, 7, 20
                                  o
falso, 43                     hora, 69
fecha, 69
Figura de la tortuga, 14      Idioma, 14
fin, 20, 43                   iguales?, 22, 43
fincron´metro?, 69
         o                    ila, 26
fincrono?, 69                 Imprimir imagen, 12
finflujo?, 49                 imts, 46
finl´nea, 32
     ı                        imvars, 46
finpol´gono, 31
       ı                      indicesecuencia, 61
finpoli, 31                   indsec, 61
finpto, 32                    instr, 61
finpunto, 32                  instrumento, 61
fintexto, 32                  invierte, 41
fintxt, 32                    inviertel´piz, 26
                                         a
90                                                ´           ´
                                                  INDICE ALFABETICO


.jpg, 12, 49                    menuigu, 66
                                MIDI, 16, 61
L´
 ınea de Comando, 7             miembro, 42
largoetiqueta, 27, 30           miembro?, 43
leecar, 63                      mientras, 53, 56
leecarflujo, 49                 modojaula, 27, 28
leelineaflujo, 48               modoventana, 27, 28
leelista, 63                    modovuelta, 27, 28
leeprop, 47                     mp, 41
leepropiedad, 47                msj, 28
leerat´n, 64
        o                       mt, 26
leetecla, 63                    mu, 41
leeteclado, 63                  muestratortuga, 26, 60
.lgo, 13                        multitortuga, 60
Licencia GPL, 17
limpia, 27                      N´mero m´ximo de tortugas, 15
                                 u         a
lista, 41                       N´meros, 19
                                 u
lista?, 43                      naranja, 36
Listado de primitivas, 24       negrita, 38
listaflujos, 48                 negro, 35
listaprocs, 46                  nft, 37
listaprop, 47                   Niebla densa, 35
listapropiedades, 47            Niebla lineal, 35
Listas, 19, 41, 81              ninguno, 38
Listas de Propiedades, 47       no, 38
listasprop, 46                  nombrefuentetexto, 37
listaspropiedades, 46           Nuevo, 11
listavars, 46                   numero?, 43
ln, 39                          o, 22, 38
local, 45                       objeto, 46
log, 39                         ocultatortuga, 26
log10, 39                       Operadores aritm´ticos, 22
                                                 e
Logaritmos, 39                  Operadores l´gicos, 22, 38
                                            o
logneperiano, 39                Opuesto, 39
Luz Ambiental, 34               orientaci´n, 31
                                          o
Luz Direccional, 34             ot, 26
magenta, 36                     palabra, 41
Marco de adorno, 15             palabra?, 43
marr´n, 36
    o                           Palabras, 19
maximastortugas, 60             para, 20, 43
maxt, 60                        paracada, 56
May´sculas y min´sculas, 22
    u            u              pcc, 24
mecanograf´a, 37
           ı                    pcd, 27
Medall´n, 82
       o                        pce, 25
Memoria destinada a XLogo, 16   pctexto, 37
menos´ltimo, 41
      u                         Pegar, 7, 13
menosprimero, 41                perspectiva, 28
mensaje, 28                     pest, 38
´           ´
INDICE ALFABETICO                                          91


pf, 27                     ponx, 25, 30
pfl, 26                    ponxy, 25
pforma, 26                 ponxyz, 30
pft, 37                    pony, 25, 30
pi, 39                     ponz, 31
pindsec, 61                Portapapeles, 12
pinstr, 61                 pos, 25, 30
pla, 26                    posici´n, 25, 30
                                  o
pmt, 60                    posicionigu, 67
pnft, 37                   posrat´n, 64
                                  o
.png, 12, 49               potencia, 39
pon´ltimo, 41
    u                      pp, 41
ponbalanceo, 31            pr, 42
poncabeceo, 31             Preferencias, 14
poncalidaddibujo, 27       prim?, 43
poncl, 26                  primero, 42
poncolorcuadr´cula, 24
               ı           primitiva?, 43
poncolorcuadricula, 15     Primitivas, 19
poncolorejes, 15, 25       Primitivas personalizadas, 13
poncolorl´piz, 26
           a               proc?, 43
poncolorlapiz, 13          procedimiento?, 43
poncolorpapel, 13, 26      Procedimientos, 20
poncolortexto, 37          producto, 22, 39
poncp, 26                  Propiedades, 26
pondir, 48                 ptortuga, 60
pondirectorio, 48          pu, 41
ponestilo, 38              punto, 25, 30
ponforma, 14, 26           Punto de Luz, 34
ponformal´piz, 26
           a
ponfuente, 27              quita, 41
ponfuentetexto, 37
pongrosor, 26              raizcuadrada, 39
ponindicesecuencia, 61     Rat´n, 64
                               o
poninstrumento, 16, 61     rat´n?, 64
                               o
ponl´piz, 26
     a                     rc, 39
ponmaximastortugas, 60     re, 24, 29
ponnombrefuentetexto, 37   Recursividad, 59
ponorientaci´n, 31
              o            redondea, 39
ponpos, 25, 30             reemplaza, 42
ponposici´n, 25, 30
           o               refresca, 36
ponprimero, 41             refrescar, 36
ponprop, 47                rellena, 50
ponpropiedad, 47           rellenazona, 50
ponr, 25                   repite, 53, 56
ponrumbo, 25, 30           repitepara, 56
ponsep, 38                 repitesiempre, 56
ponseparaci´n, 38
             o             Resaltado, 17
pontama~opantalla, 27
        n                  resto, 39
pontortuga, 60             retrocede, 24, 29
92                                                 ´           ´
                                                   INDICE ALFABETICO


rojo, 35                        Traducir XLogo, 17
rojooscuro, 36                  trazado, 46
rosa, 36                        Tres Dimensiones, 28
rotula, 27, 30                  truncar, 39
RTF, 12                         trunca, 39
rumbo, 25, 30                   tv, 27
Ruptura de secuencia, 53
                                ´ltimo, 42
                                u
Salir, 10, 12                   unicode, 63
Saltos de l´ınea, 21
                                vac´o?, 43
                                   ı
sec, 61
                                Valor absoluto, 39
secuencia, 61
                                var?, 43
Seleccionar todo, 13
                                variable?, 43
sen, 39
                                Variables, 21, 44
Seno, 39
                                Variables globales, 45
seno, 39
                                Variables locales, 45
separaci´n, 38
           o
                                Variables opcionales, 45
si, 54
                                Velocidad de la tortuga, 14
Sintaxis, 22                    Ventana de Editor, 20
sisino, 54                      verde, 35
sl, 26                          verdeoscuro, 36
sn, 29                          violeta, 36
Sonido, 16                      visible?, 43
sub´ndice, 38
    ı                           vista3d, 32
subel´piz, 26
       a                        vistapol´gono, 32
                                          ı
subenariz, 29
subrayado, 38                   y, 22, 38
suma, 22, 39
super´ndice, 38
       ı                        Zoom, 7
                                zoom, 27
tachado, 38
Tama˜o de la ventana, 16
      n
Tama˜o m´ximo del l´piz, 15
      n   a          a
tama~opantalla, 27
     n
tama~oventana, 27
     n
tan, 39
Tangente, 39
tangente, 39
tecla?, 63
Teclado, 63
tiempo, 69
tipea, 37
tocam´sica, 61
      u
Tocar m´sica, 61
        u
tortuga, 60
tortugas, 60
tpant, 27
Traducci´n de la Licencia, 17
        o
Traducir procedimientos, 13

Más contenido relacionado

PDF
R manual
PDF
Tutorial de maxima
PDF
Ainotes Spanish
PDF
Algebra de lie
PDF
Material MAT021
PDF
Manual Scilab
R manual
Tutorial de maxima
Ainotes Spanish
Algebra de lie
Material MAT021
Manual Scilab

La actualidad más candente (15)

PDF
Algebra lineal
PDF
Manual excitador-vaca
PDF
Manual de latex
PDF
Conselleria educació pmb_bibliotecas
PDF
Vba excel numericos
PDF
PDF
Curso programación y_métodos_numéricos_linux
PDF
Modulo fisica-i1
PDF
Bases del Concurso Público para el Otorgamiento de Autorizaciones
PDF
Fisica y Quimica - Mecanica cuantica I
PDF
PDF
MANUAL DE LENGUAJE C
PDF
PDF
Diseño canónico control automatico
Algebra lineal
Manual excitador-vaca
Manual de latex
Conselleria educació pmb_bibliotecas
Vba excel numericos
Curso programación y_métodos_numéricos_linux
Modulo fisica-i1
Bases del Concurso Público para el Otorgamiento de Autorizaciones
Fisica y Quimica - Mecanica cuantica I
MANUAL DE LENGUAJE C
Diseño canónico control automatico
Publicidad

Similar a 52811100 manual-sp (20)

PDF
Manualscilab 090513151714 Phpapp02
PDF
Introduccion a la programacion en c prev
PDF
Algoritmos
PDF
Vba excel mnumericos1
PDF
Vba excel mnumericos
PDF
Physthones 0 1
PDF
Guia ruby
PDF
Guia usuario-ruby
PDF
Manual LyX: Con "L" de LaTeX
PDF
Practica5 bash prog-intro-como
PDF
PDF
Introduccion a xhtml
PDF
Introduccion a xhtml
PDF
Introduccion a xhtml
PDF
5. desarrollador web profesional
PDF
Tutorial xhtml y css
PDF
Minimanualillo swi prolog
PDF
Tutorial xhtml+css
PDF
Xhtml tuto beta
PDF
Curso logica digital unam
Manualscilab 090513151714 Phpapp02
Introduccion a la programacion en c prev
Algoritmos
Vba excel mnumericos1
Vba excel mnumericos
Physthones 0 1
Guia ruby
Guia usuario-ruby
Manual LyX: Con "L" de LaTeX
Practica5 bash prog-intro-como
Introduccion a xhtml
Introduccion a xhtml
Introduccion a xhtml
5. desarrollador web profesional
Tutorial xhtml y css
Minimanualillo swi prolog
Tutorial xhtml+css
Xhtml tuto beta
Curso logica digital unam
Publicidad

52811100 manual-sp

  • 1. Manual del Usuario Original en Franc´s: Lo¨c Le Coq e ı o ´ Traducci´n: Alvaro Vald´s y Marcelo Duschkin e http://xlogo.tuxfamily.org
  • 2. ´ Indice general 1. Presentaci´n o 5 1.1. Introducci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 5 1.2. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Caracter´ ısticas de la Interfaz 6 2.1. Primera Ejecuci´n . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2. La ventana principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3. El editor de procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4. Salir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3. Opciones del Men´ u 11 3.1. Men´ “Archivo” . . . . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2. Men´ “Edici´n” . . . . u o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3. Men´ “Herramientas” . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.4. Men´ “Ayuda” . . . . . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4. Convenciones adoptadas para XLogo 19 4.1. Comandos y su interpretaci´n . . . . o . . . . . . . . . . . . . . . . . . . . . 19 4.2. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.3. El caracter especial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.4. May´sculas y min´sculas . . . . . . . u u . . . . . . . . . . . . . . . . . . . . . 22 4.5. Operadores y sintaxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.5.1. Operadores aritm´ticos . . . . e . . . . . . . . . . . . . . . . . . . . . 22 4.5.2. Operadores l´gicos . . . . . . o . . . . . . . . . . . . . . . . . . . . . 22 4.6. Las tildes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5. Listado de primitivas 24 5.1. Movimientos de la tortuga; poner l´piz y colores a . . . . . . . . . . . . . . . 24 5.1.1. Movimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.1.2. Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.1.3. La tortuga en Tres Dimensiones . . . . . . . . . . . . . . . . . . . . 28 5.1.4. Acerca de los colores . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.1.5. Animaci´n . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . 36 5.1.6. Propiedades del Hist´rico de Comandos . o . . . . . . . . . . . . . . . 37 5.2. Operaciones aritm´ticas y l´gicas . . . . . . . . e o . . . . . . . . . . . . . . . 38 5.3. Operaciones con listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4. Booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.5. Trabajando con procedimientos y variables . . . . . . . . . . . . . . . . . . 43 5.5.1. Acerca de los procedimientos . . . . . . . . . . . . . . . . . . . . . 43 2
  • 3. ´ INDICE GENERAL 3 5.5.2. Procedimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.5.3. Variables fijas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.5.4. Variables opcionales . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.5.5. Conceptos acerca de variables . . . . . . . . . . . . . . . . . . . . . 45 5.5.6. La primitiva trazado . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.6. Listas de Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5.7. Manejo de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 5.8. Funci´n avanzada de relleno . . . . . o . . . . . . . . . . . . . . . . . . . . . 50 5.9. Comandos de ruptura de secuencia . . . . . . . . . . . . . . . . . . . . . . 53 6. Condicionales 54 7. Bucles y recursividad 56 7.1. Bucle con repite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.2. Bucle con repitepara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.3. Bucle con mientras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.4. Bucle con paracada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.5. Bucle con repitesiempre . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 7.6. Recursividad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 8. Modo multitortuga 60 9. Tocar m´ sica (MIDI) u 61 10.Recibir entrada del usuario 63 10.1. Interactuar con el teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 10.2. Interactuar con el rat´n . . o . . . . . . . . . . . . . . . . . . . . . . . . . . 64 10.3. Componentes Gr´ficos . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . 66 10.3.1. Crear un componente gr´fico . a . . . . . . . . . . . . . . . . . . . . . 66 11.Gesti´n de tiempos o 69 12.Utilizaci´n de la red con XLogo o 71 12.1. La red: ¿c´mo funciona eso? . . . . . . . . . . . . . . . . . . . . . . . . . . o 71 12.2. Primitivas orientadas a la red . . . . . . . . . . . . . . . . . . . . . . . . . 71 13.Ejemplos de programas 74 13.1. Dibujar casas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 13.2. Dibujar un rect´ngulo s´lido . . . . . . . a o . . . . . . . . . . . . . . . . . . . 75 13.3. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 13.4. Copo de nieve (Gracias a Georges No¨l) e . . . . . . . . . . . . . . . . . . . 76 13.5. Escritura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 13.6. Conjugaci´n (s´lo verbos regulares) . . . o o . . . . . . . . . . . . . . . . . . . 77 13.6.1. Primera versi´n . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . 77 13.6.2. Segunda versi´n . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . 78 13.6.3. Tercera versi´n (con recurrencia) o . . . . . . . . . . . . . . . . . . . 78 13.7. Colores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 13.7.1. Introducci´n . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . 78 13.7.2. Pr´ctica: Escala de grises . . . . . a . . . . . . . . . . . . . . . . . . . 79 13.7.3. Negativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
  • 4. 4 ´ INDICE GENERAL 13.8. Listas (Gracias a Olivier SC) . . . . . . . . . . . . . . . . . . . . . . . . . . 81 13.9. Un lindo medall´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 82 14.Acerca de XLogo 83 14.1. Desinstalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 14.2. El sitio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 14.3. Acerca de este documento . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 15.Carnaval de Preguntas – Artima˜ as – Trucos que conocer n 84 15.1. Preguntas frecuentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 15.2. ¿C´mo puedo ayudar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 86
  • 5. Cap´ ıtulo 1 Presentaci´n o 1.1. Introducci´n o Logo es un lenguaje desarrollado a finales de los a˜os 60 por Seymour Papert. Es un n lenguaje excelente para comenzar a estudiar programaci´n, y ense˜a lo b´sico acerca de o n a 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 ı, a e posible operar con palabras y listas. Este estilo gr´fico hace de Logo un lenguaje ideal para principiantes, y especialmente a f´cil para los ni˜os. a n XLogo es un int´rprete Logo escrito en Java. Actualmente soporta diez idiomas e e e n e ´ (Franc´s, Ingl´s, Espa˜ol, Portugu´s, Arabe, Esperanto, Gallego, Asturiano y Griego) 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 a la ventaja de ser multi-plataforma; esto es, XLogo podr´ ejecutarse en cualquier sistema a operativo que soporte Java; tanto usando Linux como Windows, MacOS o Solaris, XLogo funcionar´ sin problemas. a 5
  • 6. Cap´ ıtulo 2 Caracter´ ısticas de la Interfaz 2.1. Primera Ejecuci´n o La primera vez que ejecute XLogo (o si ha borrado el fichero .xlogo – ver secci´n 14.1) o deber´ elegir el idioma con que quiere trabajar, seleccionando la bandera correspondiente a y haciendo click en el bot´n OK. o Esta elecci´n no es definitiva; puede elegir otro idioma en cualquier momento desde las o opciones de men´ (secci´n 3.3) u o 2.2. La ventana principal 6
  • 7. 2.3. EL EDITOR DE PROCEDIMIENTOS 7 En la fila superior, est´n las entradas t´ a ıpicas de men´: Archivo, Edici´n, Herra- u o mientas, Ayuda Justo debajo est´ la L´ a ınea de Comando, donde se escriben las instrucciones Logo. a ´ En el medio de la pantalla, est´ el Area de Dibujo (donde se mueve la tortuga). A la derecha del ´rea de dibujo se encuentra una barra de herramientas vertical con a 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 a o 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 o arriba y flecha abajo del teclado (lo que es m´s pr´ctico). a a A la derecha de la ventana del hist´rico hay dos botones: Editar y Alto. o • Editar permite abrir la ventana del editor de procedimientos. • Alto interrumpe la ejecuci´n del programa ingresado. o 2.3. El editor de procedimientos Hay cuatro maneras de abrir el editor: Escribir editatodo o edtodo en la L´ınea de Comando. La ventana del editor se abrir´ mostrando todos los procedimientos definidos hasta ese momento. a Si deseas editar un procedimiento en especial (o algunos), debes usar ed o edita en la l´ ınea de comandos seguido del nombre de procedimiento, o la lista con los nombres de procedimientos que deseas editar: edita "nombre_procedimiento o: edita [proc_1 proc_2] Hacer click en el bot´n Editar. o Usar el atajo de teclado Alt+E Estos son los diferentes botones que encontrar´s en la ventana del Editor: a
  • 8. 8 CAP´ ITULO 2. CARACTER´ ISTICAS DE LA INTERFAZ 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 o aplicar los procedimientos recientemente incorporados. Atajo de teclado: ALT+Q. Cierra la ventana del editor sin guardar los ultimos cambios. ´ Ten presente que NO aparece ning´n mensaje de confirmaci´n. u o Aseg´rate bien de que realmente no hay nada que guardar. u Atajo de teclado: ALT+C. 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. u Para ello se abre la ventana siguiente: Permite deshacer los ultimos cambios realizados en los procedi- ´ mientos. “Rehace” lo deshecho con el bot´n anterior. o Nota: Aunque aqu´ se representa la imagen de Tux (mascota de Linux) en el bot´n ı o “Guardar ”, en realidad se muestra la tortuga activa para dar la idea de “enviar la informa- ci´n a la tortuga”; por ejemplo, si la tortuga activa es la n´mero 3 (secci´n 3.3): o u o
  • 9. 2.3. EL EDITOR DE PROCEDIMIENTOS 9 En la parte inferior se encuentra l´ ınea donde definir el Comando de Inicio, que se ´ activa con el bot´n situado a la derecha del Area de Dibujo. o Al pulsar el bot´n, se ejecuta inmediatamente el Comando de Inicio sin necesidad de o escribirlo en la L´ ınea de Comandos, lo que es util 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 o ... 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. u Al hacer click para imprimir, aparecer´ una ventana de di´logo donde podremos configurar a a distintas opciones de impresi´n: o General: Impresora a utilizar, Imprimir a un archivo, Rango de Impresi´n y N´mero o u de copias. Configurar P´gina: Tipo de papel, Origen del papel, Orientaci´n de la Hoja y a o M´rgenes a
  • 10. 10 CAP´ ITULO 2. CARACTER´ ISTICAS DE LA INTERFAZ 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: a o Pulsamos S´ y termina la ejecuci´n. ı o
  • 11. Cap´ ıtulo 3 Opciones del Men´ u 3.1. Men´ “Archivo” u Archivo → Nuevo: Elimina todos los procedimientos y variables definidos hasta el momento para comenzar un nuevo espacio de trabajo. Se abrir´ una ventana para a confirmar la eliminaci´n de todos los procedimeintos y variables: o 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 o a haya asignado un nombre como se acaba de explicar en el punto anterior. 11
  • 12. 12 CAP´ ´ ITULO 3. OPCIONES DEL MENU Archivo → Capturar imagen → Guardar imagen como. . . : Permite guardar la imagen del ´rea de dibujo en formato jpg o png. Para ello, puedes seleccionar pre- a viamente una parte de la imagen pulsando el bot´n izquierdo del rat´n y arrastrando. o o 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 a o 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 o 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), o manteniendo los colores de los mensajes. Si no se escribe la extensi´n .rtf, se a˜ade o n autom´ticamente. a Archivo → Salir: Finaliza la ejecuci´n de XLogo. Tambi´n puede terminarse la o e ejecuci´n desde la L´ o ınea de comandos con la primitiva adi´s. o 3.2. Men´ “Edici´n” u o Edici´n → Copiar: copia el texto seleccionado en el portapapeles. Atajo de teclado: o Control+C Edici´n → Cortar: corta el texto seleccionado y lo copia en el portapapeles. Atajo o de teclado: Control+X
  • 13. ´ 3.3. MENU “HERRAMIENTAS” 13 Edici´n → Pegar: pega el texto desde el portapapeles a la l´ o ınea de comandos. Atajo de teclado: Control+V Edici´n → Seleccionar todo: Selecciona todo lo que se encuentra escrito en la o L´ ınea de Comandos. 3.3. Men´ “Herramientas” u Herramientas → Elegir el color del l´piz: Permite elegir el color con que la a tortuga dibujar´, desde la paleta de colores, mediante una definici´n HSB (Hue, Sa- a o turation, Brightness - Tonalidad, Saturaci´n, Brillo) o desde una codificaci´n RVA o o (Rojo, Verde y Azul). Tambi´n accesible con el comando poncolorlapiz. (Secci´n 5.1.2) e o 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 a e accesible con el comando poncolorpapel. (Secci´n 5.1.2) o 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- a primitivas” del lenguaje XLogo. Pero no pueden ser modificadas por el usuario. As´ı se pueden definir primitivas personalizadas . Herramientas → Traducir procedimientos: Abre una caja de di´logo que per- a mite traducir los comandos XLogo entre dos idiomas. Es muy util, en particular, ´ cuando se obtienen c´digos Logo en ingl´s (de internet, por ejemplo) para expresar- o e los en el idioma deseado (Espa˜ol, Franc´s, . . . ) n e
  • 14. 14 CAP´ ´ ITULO 3. OPCIONES DEL MENU Herramientas → Borra procedimientos: Abre una caja de di´logo que permite a selccionar el procedimiento que se desea borrar, de una forma m´s sencilla que con a la primitiva borra. Herramientas → Preferencias: Abre una caja de di´logo donde se pueden confi- a gurar varios aspectos: • General: ◦ Idioma: Permite elegir entre Franc´s, Ingl´s, Espa˜ol, Gal´s, Portugu´s, e e n e e ´ Esperanto, Arabe y Gallego. Nota que las primitivas se adec´an a cada u lenguaje. ◦ Aspecto: Permite definir el aspecto de la ventana XLogo. Est´n disponi- a 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 o e con el comando ponforma (Secci´n 5.1.2) o • Opciones:
  • 15. ´ 3.3. MENU “HERRAMIENTAS” 15 ◦ Cuadr´ ıcula en el fondo: Establece (o elimina) una cuadr´ıcula en el fondo ´ del Area de dibujo, as´ como las medidas y el color de la misma. Tambi´n ı e accesible con las primitivas cuadricula, detienecuadricula y poncolor- cuadricula. (Secci´n 5.1.2) o ´ ◦ Ejes cartesianos: Muestra (o retira) los ejes cartesianos (X e Y) del Area de dibujo, establece su escala (separaci´n entre marcas) y su color. Tambi´n o e accesible con las primitivas ejes, detieneejes, ejex, ejey y poncolorejes (Secci´n 5.1.2). o ◦ Color de papel predeterminado: Permite elegir el color por defecto del papel, es decir, el mostrado al iniciar XLogo. ◦ Color de l´piz predeterminado: Permite elegir el color por defecto del a l´piz, es decir, el utilizado al iniciar XLogo. a ◦ Marco de adorno: Permite elegir qu´ marco de adorno se muestra alre- e ´ dedor del Area de Dibujo, una imagen o un color s´lido. Para no superar o la memoria asignada, la imagen no puede ocupar m´s de 100 kb. a ◦ N´ mero m´ximo de tortugas: Para el modo multitortuga (secci´n 8). u a o Por defecto 16. ◦ Tama˜ o m´ximo del l´piz: Puedes fijar un tama˜o l´ n a a n ımite para el l´piz. a
  • 16. 16 CAP´ ´ ITULO 3. OPCIONES DEL MENU Si no se va a utilizar esta limitaci´n, introduce el n´mero -1 en el recuadro o u asociado. ◦ Forma del l´piz: Cuadrado o Redondo a ◦ Tama˜ o de la ventana para dibujar: Puedes establecer un tama˜o per- n n ´ sonalizado para el Area de Dibujo. Por defecto XLogo establece un ´rea a de 1000 por 1000 pixels. Atenci´n: seg´n aumenta el tama˜o de la imagen, puede ser necesario o u n aumentar la memoria destinada a XLogo. Un mensaje de error advertir´ a 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 u ralentizaci´n de la ejecuci´n. o o ◦ Borrar pantalla al salir del editor: S´ o No ı ◦ Tama˜ o de la ventana para dibujar: Determina las dimensiones del n ´ Area 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 Area de n Dibujo sea demasiado grande. La modificaci´n de este par´metro s´lo se o a o har´ efectiva tras cerrar y reiniciar XLogo. a Atenci´n: no aumentar en exceso y/o sin raz´n este valor, ya que pue- o o de ralentizar considerablemente el sistema. Un ejemplo en el que se puede necesitar bastante memoria disponible es al trabajar en el modo 3D com dise˜os muy complejos. n • Sonido: La lista de instrumentos que puede imitar la tarjeta de sonido a trav´s e 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´ Esto se debe a que la versi´n ıa. o de Java para Windows no incluye los bancos de sonido, y deben instalarse manualmente. Echa un vistazo a la secci´n 15.1. o • Fuente: Elige el tipo de letra y su tama˜o n
  • 17. ´ 3.4. MENU “AYUDA” 17 • Resaltado: Elige los colores que se utilizar´n en el resaltado de primitivas, a palabras, variables n´meros, par´ntesis y corchetes. u e 3.4. Men´ “Ayuda” u Ayuda → Licencia: Muestra la licencia original GPL (en Ingl´s) bajo la cual es e distribuido este programa. Ayuda → Traducci´n de la Licencia: Refiere a una traducci´n al espa˜ol de la o o n licencia GPL, sin efectos legales, s´lo como referencia para entender la versi´n en o o Ingl´s. e Ayuda → Traducir XLogo: Abre una ventana para a˜adir y/o corregir traduccio- n 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 o a guardar los cambios y que debes enviar a loic@xlogo.tuxfamily.org
  • 18. 18 CAP´ ´ ITULO 3. OPCIONES DEL MENU Ayuda → Acerca de. . . : Lo de siempre . . . y ¡¡xlogo.tuxfamily.org para guardar en favoritos!! o:)
  • 19. Cap´ ıtulo 4 Convenciones adoptadas para XLogo Esta secci´n define aspectos claves acerca del lenguaje Logo en general, y sobre XLogo o en particular. 4.1. Comandos y su interpretaci´n o 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 u de par´metros que son llamados argumentos. Por ejemplo, la primitiva bp, que borra la a 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 u u 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 e esperaba ese argumento, pero para el int´rprete, hola no representa nada, ya que no e fue definido como n´mero, ni palabra, ni lista, ni procedimiento. u Listas: Se definen encerr´ndolas entre corchetes. a Los n´meros son tratados a veces como un valor (por ej: av 100), o bien como una palabra u (por ejemplo: escribe vacio? 12 devuelve falso). Algunas primitivas tienen una forma general, esto es, pueden ser utilizadas con n´meros u 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 e o entre par´ntesis. Observa los ejemplos: e 19
  • 20. 20 CAP´ ITULO 4. CONVENCIONES ADOPTADAS PARA XLOGO escribe (suma 1 2 3 4 5) devuelve: 15 Tambi´n: e escribe (lista [a b] 1 [c d]) devuelve: [a b] 1 [c d] y 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 a 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. e Veamos un peque˜o ejemplo: n 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 o o 2. Se mostrar´ la Ventana del Editor, donde completamos todo el procedimiento a 3. Pulsar con el rat´n, o hacer Alt+Q o 4. En la ventana del Hist´rico de Comandos, debe aparecer el mensaje: o Acaba de definir cuadrado El int´rprete XLogo no detecta los posibles errores e en este momento, sino cuando se utilice el procedimiento por primera vez.
  • 21. 4.3. EL CARACTER ESPECIAL 21 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 e 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) o 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 "xlogonxlogo 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.7). Para establecer como directorio de trabajo o o 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´ interpretada como: ıa c:Mis Documentos y el int´rprete mostrar´ un mensaje de error. e a
  • 22. 22 CAP´ ITULO 4. CONVENCIONES ADOPTADAS PARA XLOGO 4.4. May´ sculas y min´ sculas u u XLogo no distingue entre may´sculas y min´sculas en el caso de nombres de procedi- u u 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 e a a cuadrado. Por otro lado, XLogo s´ respeta may´sculas y min´sculas en listas y palabras: ı u u 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: o 4.5.1. Operadores aritm´ticos e suma diferencia producto divisi´n o + - * / 4.5.2. Operadores l´gicos o o y iguales? | & = Para comparaciones num´ricas, disponemos de cuatro operadores sin primitiva asociada: e El operador “menor”: < El operador “mayor”: > Por analog´ con otros lenguajes, XLogo incorpora otros dos: ıa El operador “menor o igual”: <= El operador “mayor o igual”: >= si bien es evidente que no ser´ estrictamente necesarios: ıan a <= b es equivalente a no (a >b) a >= b puede sustituirse por no (a <b)
  • 23. 4.6. LAS TILDES 23 Nota aclarativa: 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 4.6. Las tildes Desde la versi´n 0.9.92 las primitivas en espa˜ol XLogo admiten tildes. Trat´ndose de o n a un software para uso educativo, es importante que la ortograf´ sea la adecuada. ıa Para la acentuaci´n de las primitivas se siguen las normas ortogr´ficas habituales, espe- o a cialmente en aquellas primitivas compuestas por varias palabras. Por ejemplo: poncolorl´piz. La palabra l´piz lleva tilde y la mantiene al formar parte de la a a primitiva, ya que la acentuaci´n de esta recae sobre la “a” o leelineaflujo. Aunque l´nea lleva tilde al ser esdr´jula, al pronunciar la primitiva ı u completa, observamos que es una palabra llana (el acento se encuentra en la “u” de flujo), as´ que no se le asigna tilde. ı S´ que lleva tilde en definel´nea y finl´nea, por el mismo motivo explicado antes ı ı ı para l´piz a Se procede del mismo modo en las formas cortas de las primitivas. Las formas cor- tas de definepol´gono y finpol´gono son, respectivamente, defpoli y finpoli. ı ı Escuchando a los alumnos pronunciarlas, se opt´ por considerarlas llanas y sin tilde. o Dicho lo anterior, debemos tener una idea sobre la distinta codificaci´n de caracteres o que usan los Sistemas Operativos. La codificaci´n de caracteres es el m´todo que convierte un car´cter de un lenguaje natu- o e a ral en un c´digo num´rico. Es muy habitual (m´s de lo que ser´ deseable) que los sistemas o e a ıa operativos (Windows, Linux, MacOS, Solaris, . . . ) usen distintos sistemas de codificaci´n. o Existen varias normas: ASCII, Unicode, UTF, ISO, . . . , y eso afecta negativamente a los caracteres especiales del espa˜ol: n Vocales acentuadas: ´, ´, ´ ´, u a e ı, o ´ Letras e˜e y “cedilla”: n y ¸ n ˜ c Apertura de exclamaci´n, interrogaci´n, . . . : ¿, ¡ , . . . . o o Si tienes intenci´n de compartir tus programas por Internet, intenta evitar estos carac- o teres y utiliza primitivas sin tilde. Si est´s en una aula, recomendamos el uso acentuado de a las mismas.
  • 24. 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 a 5.1.1. Movimientos Esta primera tabla define las primitivas que gobiernan el movimiento de la tortuga, y s´lo necesitan un argumento: o Primitivas Argumentos Uso n: n´mero de u Mueve la tortuga hacia adelante n pasos en la di- avanza, av pasos recci´n que actualmente est´ mirando. o a n: n´mero de u Mueve la tortuga hacia atr´s n pasos en la direc- a retrocede, re pasos ci´n que actualmente est´ mirando. o a giraderecha, Gira la tortuga n grados hacia la derecha de la n: ´ngulo a gd direcci´n que actualmente est´ mirando. o a giraizquierda, Gira la tortuga n grados hacia la izquierda de la n: ´ngulo a gi direcci´n que actualmente est´ mirando. o a En esta segunda tabla el movimiento se controla mediante coordenadas en la pantalla. Para ver mejor dichas coordenadas, se dispone de las primitivas cuadr´cula, 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 Area de dibujo cuadr´cula ı a b: n´meros u de dimensiones a x b y borra la pantalla Quita la cuadr´ ´ ıcula del Area de dibujo y borra borracuadr´cula ı no la pantalla poncolorcuadr´cula primitiva, ı Establece el color de la cuadr´ ´ ıcula del Area de pcc lista o numero dibujo colorcuadr´cula ı no Devuelve el color actual de la cuadr´ ıcula. 24
  • 25. ´ 5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES 25 Primitivas Argumentos Uso Dibuja los ejes cartesianos (X e Y) de escala ejes a: n´mero u (separaci´n entre marcas) a, con las etiquetas o correspondientes. Dibuja el eje de abscisas (eje X) de escala (sepa- ejex a: n´mero u raci´n entre marcas) a, con las etiquetas corres- o pondientes. Dibuja el eje de ordenadas (eje Y) de escala ejey a: n´mero u (separaci´n entre marcas) a, con las etiquetas o correspondientes. ´ Quita los ejes del Area de dibujo y borra la borraejes no pantalla primitiva, ´ Establece el color de los ejes en el Area 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 o centro no coordenadas [0 0] con rumbo 0. Devuelve las coordenadas X e Y de la posici´n o posici´n, pos o no actual de la tortuga. [x y]: Mueve la tortuga a las coordenadas especifica- ponposici´n, o lista de dos das por los dos n´meros en la lista (x es la abs- u ponpos n´meros u 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 e u 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. a a Esta tercera tabla muestra las primitivas que controlan el rumbo, direcci´n en grados o respecto de la vertical y mirando hacia arriba: Primitivas Argumentos Uso rumbo no Devuelve el rumbo o el ´ngulo de la tortuga. a Orienta la tortuga en la direcci´n especificada. 0 o ponrumbo, ponr n: rumbo corresponde a mirar hacia arriba verticalmente. La lista debe contener dos n´meros que represen- u ten coordenadas. Devuelve el rumbo que la tortuga hacia a: lista deber´ seguir hacia el punto definido por las coor- a denadas. La lista debe contener dos n´meros que represen- u ten coordenadas. Devuelve el n´mero de pasos des- u distancia a: lista de la actual posici´n y el punto definido por las o coordenadas.
  • 26. 26 CAP´ ITULO 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? a e a Primitivas Argumentos Uso muestratortuga, no Hace que la tortuga se vea en pantalla. mt ocultatortuga, no Hace invisible a la tortuga. ot bajal´piz, bl a no La tortuga dibujar´ una l´ a ınea cuando se mueva. subel´piz, sl a no La tortuga no dibujar´ cuando se mueva. a goma, go no La tortuga borrar´ toda traza que encuentre. a inviertel´piz, a no Pone la tortuga en “modo inverso”, y l´piz abajo. a ila Pone la tortuga en el modo normal de dibujo y ponl´piz, pla a no l´piz abajo. a a: n´mero, u poncolorl´piz, a Cambia el color del l´piz. La especificaci´n del a o primitiva o poncl color se detalla en la secci´n 5.1.4 o lista [r v a] Define el grosor del trazo del l´piz (en pixels). Por a pongrosor n: n´mero u defecto es 1. La forma es cuadrada. colorl´piz, cl a a: lista Devuelve el color actual del l´piz. a encuentracolor, Devuelve el color del punto definido por las coor- a: lista ec denadas. grosorl´piz, a no Devuelve el grosor del l´piz. a gl ponformal´piz, a Fija la forma del l´piz: pfl 0: cuadrada; pfl 1: a n: 0 ´ 1 o pfl ovalada. formal´piz, fl a no Devuelve la forma del l´piz. a Puedes elegir tu tortuga preferida en la segunda etiqueta del men´ Herramientas → Preferen- u ponforma, n: n´mero u cias, pero tambi´n es posible con ponforma. El n´- e u 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- u forma no tual de la tortuga. ´ El control del Area de dibujo se realiza con las primitivas siguientes: Primitivas Argumentos Uso a: n´mero, u poncolorpapel, Cambia el color del papel (fondo). La especifi- primitiva o poncp caci´n del color se detalla en la secci´n 5.1.4 o o lista [r v a]
  • 27. ´ 5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES 27 Primitivas Argumentos Uso Devuelve el color actual del “papel” (fondo, ´rea a colorpapel a: lista de dibujo). poncalidaddibujo, Fija la calidad del dibujo: pcd 0: normal; pcd n: 0, 1 ´ 2 o pcd 1: alta; pcd 2: baja; calidaddibujo, no Devuelve la calidad del dibujo cdib tama~opantalla, n Devuelve una lista que contiene el tama˜o de la n no tpant pantalla pontama~opantalla n Fija el tama˜o de la pantalla. Ejemplo: ptp n a: lista ptp [1000 1000] La tortuga puede salir del ´rea de dibujo (pero a modoventana no no dibujar´ nada). a Si la tortuga sale del ´rea de dibujo, vuelve a a modovuelta no aparecer en el lado opuesto La tortuga queda confinada al ´rea de dibujo. a Si intenta salir, aparecer´ un mensaje de error a modojaula no avisando cu´ntos pasos faltan para el punto de a salida. Devuelve una lista con cuatro elementos, las coordenadas de la esquina superior izquierda y tama~oventana, n 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 Area de dibujo. En concreto, el valor de a es el factor de escala respecto a la zoom a: n´mero u ´ imagen original: (a>1) acerca el Area de dibujo; ´ (0<a<1) aleja el Area de dibujo. borrapantalla, bp Vac´ el ´rea de dibujo, situando a la tortuga ıa a no en el centro de la pantalla. Vac´ el ´rea de dibujo, dejando a la tortuga en ıa a limpia no el lugar donde estaba tras la ejecuci´n anterior. o 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. o o a Devuelve, en p´ ıxels, la longitud que tendr´ en pan- a largoetiqueta a: lista talla la lista. Cuando se escribe con la primitiva rotula, mo- ponfuente, pf n: n´mero u difica el tama˜o de la tipograf´ Por defecto, el n ıa. tama˜o es 12. n
  • 28. 28 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Primitivas Argumentos Uso Devuelve el tama˜o de la tipograf´ cuando se es- n ıa fuente no cribe en pantalla con la primitiva rotula. Muestra una caja de di´logo con el mensaje que a mensaje, msj a: lista est´ en la lista. El programa se detiene hasta que a el usuario hace un click en el bot´n “Aceptar” o Dibuja una circunferencia de radio n alrededor de c´rculo ı 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 a b: ´ngulos a 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´ o a ıxels la longitud en pan- talla de la frase Hola, ¿c´mo est´s? o a 5.1.3. La tortuga en Tres Dimensiones Desde la versi´n 0.9.92, nuestra tortuga puede dejar el plano para trasladarse a un o espacio en tres dimensiones (3D). Para cambiar a esta modalidad, Usaremos la primitiva perspectiva. ¡Bienvenido a un mundo en 3D! Para recuperar el modo bidimensional (2D), debemos indicarle que vuelva a uno de los modos “planos”: modojaula, modoventana o modovuelta. La proyecci´n en perspectiva o Para representar un espacio 3D en un plano 2D, Xlogo utiliza una proyecci´n eno perspectiva. Es equivalente a tener una c´mara grabando la escena en 3D, y mostrando en a la pantalla la imagen de la proyecci´n. Veamos un esquema gr´fico para explicarlo mejor: o a Disponemos de primitivas para fijar la posici´n de la c´mara, mientras que la pantalla o a de proyecci´n se encuentra en el punto medio entre la c´mara y el objeto. o a
  • 29. ´ 5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES 29 Entender la orientaci´n en el mundo tridimensional o En el plano, la tortuga la orientaci´n se define unicamente por su rumbo. Sin embargo, o ´ en el mundo tridimensional la orientaci´n de la tortuga necesita de tres ´ngulos. Si usamos o a la orientaci´n por defecto de la tortuga en 3D (en el plano XY mirando hacia el semieje Y o positivo): Balanceo: la rotaci´n en torno al eje OY o Cabeceo: la rotaci´n seg´n el eje OX o u Rumbo: la rotaci´n seg´n el eje OZ o u De hecho, para moverse en el mundo tridimiensional, la tortuga se comportar´ de modo a muy similar a un avi´n. De nuevo, ilustremos con una imagen los 3 ´ngulos: o a Balanceo Cabeceo Rumbo Parece bastante complicado la primera vez que se estudia, pero veremos que muchas cosas son similares a los movimientos en el plano bidimensional. Estas son las primitivas b´sicas para moverse en el mundo 3D: a avanza, retrocede, av, re: Id´nticas al mundo 2D e giraderecha, giraizquierda, gd, gi: Id´nticas al mundo 2D, producen una rotaci´n e o alrededor del eje transversal y vertical de la tortuga balanceaderecha, bd: la tortuga gira n grados a la derecha respecto a su eje longi- tudinal balanceaizquierda, bi: la tortuga gira n grados a la izquierda respecto a su eje longitudinal cabeceaarriba, subenariz, sn: La tortuga “sube el morro” n grados respecto a su eje transversal y horizontal cabeceaabajo, bajanariz, bn: La tortuga “baja el morro” n grados respecto a su eje transversal y horizontal En el plano bidimensional, para dibujar un cuadrado de 200 pasos de tortuga, escribi- mos: repite 4 [ avanza 200 giraderecha 90 ]
  • 30. 30 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Estas ´rdenes siguen existiendo el mundo 3D, y el cuadrado puede dibujarse perfectamente o en modo perspectiva. Si la tortuga baja “el morro” 90 grados, podemos dibujar otro cuadrado, y obtenemos: borrapantalla repite 4 [ avanza 200 giraderecha 90 ] bajanariz 90 repite 4 [ avanza 200 giraderecha 90 ] Puedes (debes) probar otros ejemplos para entender perfectamente la orientaci´n de la o tortuga y el uso de los ´ngulos y ¡convertirte en un experto! a Tambi´n debes entender que las tres primitivas que controlan la rotaci´n en 3D est´n e o a relacionadas entre s´ por ejemplo, al ejecutar: ı; borrapantalla balanceaizquierda 90 subenariz 90 balanceaderecha 90 El movimiento de la tortuga es equivalente a: giraizquierda 90 (Puedes probar con tu mano si no lo entiendes bien) Primitivas disponibles tanto en 2D como 3D Las siguientes primitivas est´n disponibles tanto en el plano como en el mundo 3D. La a unica diferencia son los argumentos admitidos por las primitivas. ´ Estas precisan de los mismos argumentos que en el plano: c´rculo ı arco centro ponx pony rumbo ponrumbo rotula largoetiqueta Las siguientes primitivas siguen esperando una lista como argumento, pero ahora debe con- tener tres argumentos, correspondientes a las tres coordenadas de un punto en el espacio: [x y z]. hacia distancia pos, posici´n o ponpos, ponposici´n o punto Primitivas s´lo disponibles en 3D o ponxyz Esta primitiva mueve a la tortuga al punto elegido. Esta primitiva espera tres argumentos que representan las coordenadas del punto. ponxyz es muy similar a ponposici´n, pero las coordenadas no est´n escritos en una o a lista. Ejemplo, ponxyz -100 200 50 traslada a la tortuga hasta el punto x = -100; y = 200; z = 50
  • 31. ´ 5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES 31 ponz Esta primitiva mueve a la tortuga al punto de “altura” o “profundidad” (desco- nozco si el t´rmino applikate usado en Alemania tiene traducci´n al castellano m´s e o a all´ de tercera coordenada) dada. ponz recibe un n´mero como argumento, de a u modo id´ntico a ponx y pony e ponorientaci´n Fija la orientaci´n de la tortuga. Esta primitiva espera una lista o o que contiene tres n´meros: [balanceo cabeceo rumbo] u Ejemplo: ponorientaci´n [100 0 58]: la tortuga tendr´ balanceo: 100 grados, ca- o a beceo: 0 grados y rumbo: 58 grados. Por supuesto, el orden de los n´meros es importante. Si, por ejemplo, el valor de u la orientaci´n es [100 20 90], esto significa que si quieres esa misma orientaci´n o o partiendo del origen (despu´s de un borrapantalla, por ejemplo) deber´s escribir la e a siguiente secuencia: cabeceaderecha 100 subenariz 20 giraderecha 90 Si en esta instrucci´n cambiamos el orden, no obtendremos la orientaci´n deseada. o o orientaci´n Devuelve la orientaci´n de la tortuga en una lista que contiene: [balanceo o o cabeceo rumbo] ponbalanceo La tortuga gira en torno a su eje longitudinal y adquiere el ´ngulo de a balanceo elegido. balanceo Devuelve el valor actual del balanceo ponbalanceo La tortuga gira en torno a su eje transversal, y se orienta con el ´ngulo a de cabeceo indicado. balanceo Devuelve el valor actual del cabeceo Visor 3D XLogo incluye un visor 3D que permite visualizar los dibujos realizados en tres dimen- siones. Este m´dulo usa las librer´ de Java3D, por lo tanto es necesario tener instalado o ıas todo el Java3D. Las reglas a tener en cuenta para utilizar el Visor 3D son: e ´ Al crear una figura geom´trica sobre el Area de Dibujo, hay que indicar al Visor 3D qu´ e formas desea grabar para una futura visualizaci´n. Es posible grabar pol´ o ıgonos (superficies), l´ ıneas, puntos o texto. Para utilizar esta funci´n, las primitivas son: o empiezapol´gono, definepol´gono, defpoli: Los movimientos de la tortuga poste- ı ı riores a esta llamada se guardan para crear un pol´ ıgono. finpol´gono, finpoli: Desde la ejecuci´n de definepol´gono, la tortuga habr´ ı o ı a pasado por varios v´rtices. Este pol´ e ıgono se habr´ “registrado” y su color se definir´ a a en funci´n del color de todos sus v´rtices. o e Esta primitiva finaliza el pol´ ıgono.
  • 32. 32 CAP´ ITULO 5. LISTADO DE PRIMITIVAS empiezal´nea, definel´nea, defl´nea: Los movimientos de la tortuga posteriores ı ı ı a esta llamada se guardan para crear un quebrado, es decir, una l´ ınea con varios v´rtices que no tiene por qu´ ser cerrada. e e finl´nea: Desde la ejecuci´n de definel´nea, la tortuga habr´ pasado por varios ı o ı a v´rtices. Se guardar´ esta l´ e a ınea y su color se definir´ en funci´n del color de todos a o sus v´rtices. e Esta primitiva finaliza la definici´n del quebrado o empiezapunto, definepunto, defpto: Los movimientos posteriores de la tortuga definen los v´rices de un quebrado cuyos v´rtices se guardan para crear un conjunto e e de puntos. finpunto, finpto: Esta primitiva finaliza la definici´n del conjunto de puntos. o empiezatexto, definetexto, deftxt: Cada vez que el usuario muestre un texto sobre ´ el Area de Dibujo con la primitiva rotula, se almacenar´ y luego ser´ representada a a por el visor 3D. fintexto, fintxt: Esta primitiva la grabaci´n de texto. o vista3d, vistapol´gono Inicia el visor 3D, todos los objetos guardados se dibujan ı en una nueva ventana. Disponemos de controles para mover la “c´mara” que muestra la escena: a • Para hacer rotar la imagen haciendo click con el bot´n izquierdo del rat´n y o o arrastrando. • Para desplazar la imagen haciendo click con el bot´n derecho del rat´n y arras- o o trando. • Para hacer zoom sobre la escena, usaremos la rueda del rat´n o Dibujando un cubo Todas las caras miden 400 pasos de tortuga. El programa es: para cuadrado # Grabamos los v´rtices del cuadrado e empiezapol´gono ı repite 4 [ avanza 400 giraderecha 90 ] finpol´gono ı fin para cubosimple # Cubo Amarillo borrapantalla perspectiva poncolorl´piz amarillo a # Caras laterales repite 4 [ cuadrado subel´piz a giraderecha 90 avanza 400 giraizquierda 90
  • 33. ´ 5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES 33 balanceaderecha 90 bajal´piz ] a # Parte inferior bajanariz 90 cuadrado subenariz 90 # Cara Superior avanza 400 bajanariz 90 cuadrado # Visualizaci´n o vista3d fin Estamos listos a ejecutar el comando: cubosimple: Al sustituir en el procedimiento cuadrado, empiezapol´gono por empiezal´nea, y ı ı finpoligono por finl´nea: ı Si hubi´ramos usado empiezapunto y finpunto en lugar de empiezal´nea y finl´nea, e ı ı deber´ ıamos ver en la pantalla s´lo los ocho v´rtices del cubo. o e Estas primitivas son muy utiles para mostrar el conjunto de puntos en el espacio 3D. ´ ´ En todos los casos, en el Area de Dibujo se muestran las aristas del cubo que luego se ver´ a “macizo” con el Visor:
  • 34. 34 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Efectos de luz y niebla Desde la versi´n 0.9.93 se pueden a˜adir efectos art´ o n ısticos a las im´genes generadas en a el Visor. Estos pueden ser efectos de luz y de niebla, y se accede a ellos con los botones presentes en el visor 3D. Efectos de luz Se pueden utilizar cuatro tipos de luz en las im´genes en tres dimensiones, a las que se a accede haciendo click en uno de los cuatro botones mostrados bajo la leyenda Iluminaci´n. o Al trazar por primera vez una imagen en 3D s´lo se utilizan dos tipos de luz, ambos o Luz Puntual, pero pulsando en cualquiera de los cuatro botones de Iluminaci´n, aparece o el siguiente cuadro de di´logo: a donde podemos elegir entre los siguientes tipos de luz: Luz Ambiente: Luz uniforme de la que s´lo puede modificarse el color o Luz Direccional: Se genera respecto a una direcci´n fija. Se parece a la luz ambiente o cuando la fuente est´ muy lejos del objeto (por ejemplo, el sol) a Punto de Luz: La fuente est´ en una posici´n determinada, como en el caso de un faro. a o Foco: Es como el punto de luz, pero el haz de luz se abre formando un cono cuya abertura debe fijarse. La mejor forma de entenderlo, es practicar con ello.
  • 35. ´ 5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES 35 Efectos de niebla Se pueden a˜adir efectos de niebla en la imagen tridimensional. Pulsa el bot´n con n o “nubes” y obtendr´s este cuadro de di´logo: a a Disponemos de dos tipos de niebla: Niebla Lineal o progresiva: La imagen se va difuminando de modo lineal, pudiendo variar dos par´metros: a La distancia a la que empieza la niebla La distancia a la que la niebla no deja ver nada (opacidad total) Niebla Densa: La niebla es uniforme en toda la escena, y s´lo necesitamos especificar la o densidad de la misma. Este es un ejemplo con niebla lineal: 5.1.4. Acerca de los colores El color en XLogo est´ especificado por una lista de tres n´meros [r v a] compren- a u didos entre 0 y 255. El n´mero r es el componente rojo, v el verde y a el azul ([r g b] u en ingl´s). XLogo tiene 17 colores predefinidos, a los que se puede referir con un n´mero, e u con su lista [r v a] o con una primitiva. Las primitivas correspondientes son: N´ mero u 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]
  • 36. 36 CAP´ ITULO 5. LISTADO DE PRIMITIVAS N´ mero u Primitiva [R V A] Color 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] 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 marr´n o [153 102 0] Ejemplo: Estas tres ´rdenes son la misma: o poncolorl´piz naranja a poncolorl´piz 13 a poncolorl´piz [255 200 0] a Veremos un ejemplo de su uso en la secci´n 13.7 o 5.1.5. Animaci´n o Existen dos primitivas llamadas animaci´n y refresca (por compatibilidad con otras o versiones de Logo se mantiene la forma en infinitivo refrescar) que permiten escribir o ´rdenes sin que la tortuga las realice. Primitivas Uso animaci´n o Se accede al modo de animaci´n. o Detiene el modo animaci´n, retornando al modo o detieneanimaci´n o normal. En modo de animaci´n, ejecuta las ´rdenes y ac- o o refresca tualiza la imagen Mientras se escriben las ´rdenes en el modo de animaci´n (una c´mara de cine aparece o o a o e ´ a la izquierda del Hist´rico de Comandos), ´stas no son ejecutadas en el Area de Dibujo sino que son almacenadas en memoria hasta que se introduce la orden refresca.
  • 37. ´ 5.1. MOVIMIENTOS DE LA TORTUGA; PONER LAPIZ Y COLORES 37 Haciendo click en este icono, se detiene el modo de animaci´n, sin necesidad de usar la o primitiva detieneanimaci´n. o Esto es muy util para crear animaci´nes o conseguir que los dibujos se realicen r´pida- ´ o a mente. 5.1.6. Propiedades del Hist´rico de Comandos o 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 a o n este ´rea, s´lo est´n disponibles para ser usadas por las primitivas escribe y tipea. a o a Primitivas Argumentos Uso ´ Borra el Area de comandos, y el ´rea del His- a borratexto, bt no t´rico de comandos. o a: n´mero, u Muestra en el Hist´rico de Comandos el argu- o escribe, es palabra o mento indicado, a. lista tipea, a: n´mero, u Id´ntico a escribe, pero el cursor queda en la l´ e ınea mecanograf´a ı palabra o donde se mostr´ el contenido del argmento. o lista Define el tama˜o de la tipograf´ del ´rea del His- n ıa a ponfuentetexto, n: n´mero u t´rico de comandos. S´lo disponible para ser o o pft usada por la primitiva escribe. fuentetexto, Devuelve el tama˜o de la tipograf´ usada por la n ıa no ftexto primitiva escribe. Define el color de la tipograf´ del ´rea del Hist´- ıa a o poncolortexto, a: n´mero o u rico de comandos. S´lo disponible para ser usada o pctexto lista por la primitiva escribe. Devuelve el color de la tipograf´ usada por la ıa colortexto no primitiva escribe en el ´rea del Hist´rico de a o comandos. Selecciona la tipograf´ n´mero n para escribir en ıa u el ´rea del Hist´rico de comandos con la primi- a o ponnombrefuentetexto, n: n´mero u tiva escribe. Puedes encontrar la relaci´n entre o pnft fuente y n´mero en el men´ Herramientas → u u Preferencias → Fuente. Devuelve una lista con dos elementos. El primero es un n´mero correspondiente a la fuente utilizada u nombrefuentetexto, no para escribir en el ´rea del Hist´rico de coman- a o nft dos con la primitiva escribe. El segundo elemento es una lista que contiene el nombre de la fuente.
  • 38. 38 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Primitivas Argumentos Uso Define los efectos de fuente para los comandos en el Hist´rico de comandos. Puedes elegir entre sie- o lista o te estilos: ninguno, negrita, cursiva, tachado, ponestilo, pest palabra subrayado, super´ndice y sub´ndice. 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. Determina la proporci´n de pantalla ocupada por o n: n´mero u ´ el Area de Dibujo y el Hist´rico de Coman- o ponseparaci´n, o ´ comprendido dos. Si n vale 1, el Area de Dibujo ocupar´ toda a ponsep entre 0 y 1 la pantalla. Si n vale 0, ser´ el Hist´rico quien la a o ocupe. Devuelve el valor de la proporci´n de pantalla ocu- o separaci´n o no ´ pada por el Area de Dibujo y el Hist´rico de o Comandos. Ejemplos de estilos de fuente: ponestilo [negrita subrayado] escribe "Hola Devuelve: Hola ponestilo "tachado mecanograf´a [Tachado] ponestilo "cursiva tipea " x ı ponestilo "super´ndice escribe 2 ı Devuelve: Tachado x2 5.2. Operaciones aritm´ticas y l´gicas e o Esta es la lista de los operadores l´gicos : o Primitivas Argumentos Uso Devuelve cierto si a ´ b son ciertos, si no, devuel- o 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 o no a: booleano falso. Si a es falso, devuelve cierto.
  • 39. ´ ´ 5.2. OPERACIONES ARITMETICAS Y LOGICAS 39 Esta es la lista de los comandos relacionados con n´meros: u Primitivas Argumentos Uso a b: suma, + n´meros a u Devuelve el resultado de sumar a y b. sumar a b: diferencia, - n´meros a u Devuelve el resultado de restar b de a. restar cambiasigno, a: n´mero u Devuelve el opuesto de a. cs a b: producto, * Devuelve el resultado de multiplicar a por b n´meros u a b: divisi´n, div,/ o Devuelve el resultado de dividir a por b n´meros u a b: Devuelve el resultado de la dividisi´n entera de a o cociente n´meros u entre b enteros a b: resto n´meros u Devuelve el resto de la divisi´n de a por b o enteros redondea a: n´mero u Devuelve el entero m´s pr´ximo al n´mero a a o u truncar, Devuelve el entero inmediatamente anterior al n´- u a: n´mero u trunca mero a a b: potencia Devuelve a elevado a la potencia b n´meros u exp a: n´mero u Devuelve e (e = 2,71828183. . . ) elevado a a raizcuadrada, a: n´mero u Devuelve la raiz cuadrada de a. rc logneperiano, a: n´mero u Devuelve el logaritmo neperiano de a. ln log10, log a: n´mero u Devuelve el logaritmo decimal de a. a: n´mero u seno, sen Devuelve el seno del n´mero a. u en grados a: n´mero u coseno, cos Devuelve el coseno del n´mero a. u en grados a: n´mero u tangente, tan Devuelve la tangente del n´mero a. u en grados arcocoseno, a: n´mero u Devuelve el ´ngulo, en grados, cuyo coseno vale a. a acos arcoseno, asen a: n´mero u Devuelve el ´ngulo, en grados, cuyo seno vale a. a arcotangente, Devuelve el ´ngulo, en grados, cuya tangente vale a a: n´mero u atan a. pi no Devuelve el n´mero π (3.141592653589793) u a: n´mero u Devuelve un n´mero al azar mayor o igual que 0 y u azar entero menor que a. Devuelve el valor absoluto (distinto de cero) del absoluto, abs a: n´mero u n´mero a u
  • 40. 40 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Ejemplos: suma 40 60 devuelve 100 diferencia 100 60 devuelve 40 cambiasigno 5 devuelve -5 cambiasigno -285 devuelve 285 divisi´n 3 6 o devuelve 0.5 cociente 3 6 devuelve 0 redondea 6.4 devuelve 6 potencia 3 2 devuelve 9 Importante: Ten cuidado con las primitivas que requieren dos par´metros, a 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 e a o a 200). Y determinar´ que hay un solo par´metro (190) cuando esperaba dos, y a a entonces generar´ un mensaje de error. Para evitar este tipo de problemas, se a usa la primitiva “cambiasigno” para especificar un n´mero negativo: u ponxy 200 cambiasigno 10 aunque tambi´n es v´lido: e a ponxy 200 (-10) Como sabemos, la presencia de par´ntesis modifica el orden en que se deben reali- e zar las operaciones. XLogo realiza las operaciones (como no pod´ ser de otra manera) ıa 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. u Sin embargo, si escribimos: escribe (3 + 2) * 4 XLogo efectuar´ la suma antes que el producto, y el resultado ser´ 20. a a Hay que tener cuidado, y esto es muy importante, si se usan las primitivas suma, diferencia, producto, divisi’on, potencia, . . . Por ejemplo, si queremos efectuar la operaci´n 35 + 2 * 4 - 7, podr´ o ıamos escribir: escribe potencia 3 5 + 2 * 4 - 7 pero observamos que XLogo devuelve: 729
  • 41. 5.3. OPERACIONES CON LISTAS 41 ¿C´mo es posible? potencia espera dos par´metros, la base y el exponente, as´ que interpre- o a ı ta que 3 es la base y el resto es el exponente, as´ que efect´a la operaci´n 5 + 2 * 4 - 7, ı u o 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: u (potencia 3 5) + 2 * 4 - 7 o bien: diferencia suma potencia 3 5 producto 2 4 7 que se entiende mejor usando par´ntesis: e 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 e a olvides que un programa debe ser entendible por otra persona. 5.3. Operaciones con listas 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. o b lista a b: a cualquiera, pon´ltimo, pu u Inserta a en la ultima posici´n de la lista b ´ o 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, u elemento labra (1 se˜ala la primera letra). Si b es una lista, n b lista o palabra devuelve el elemento n´mero a de la lista. u Si a es una lista, devuelve toda la lista menos el menos´ltimo, u a: palabra o lista ultimo elemento. Si a es una palabra, devuelve la ´ mu palabra sin la ultima 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.
  • 42. 42 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Primitivas Argumentos Uso Si a es una lista, devuelve el elemento de la lista. ´ltimo u a: palabra o lista Si a es una palabra, devuelve la ultima 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 posici´n n´mero n o u l1: lista la palabra o lista l2. agrega n: n´mero u 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 u 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 u cuenta a: palabra o lista de a. Si a es una lista, devuelve el n´mero de ele- u mentos de a. Para la primitiva miembro: Si b es una lista, investiga dentro de esta lista; hay dos casos posibles: • Si a est´ incluido en b, devuelve la sub-lista generada a partir de la primera a aparici´n de a en b. o • Si a no est´ incluido en b, devuelve la palabra falso. a 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. 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] pon´ltimo 5 [7 9 5] u 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]
  • 43. 5.5. TRABAJANDO CON PROCEDIMIENTOS Y VARIABLES 43 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. u Devuelve cierto si a es un n´mero entero, falso u entero? a: n´mero u si no. lista? a Devuelve cierto si a es una lista, falso si no. Devuelve cierto si a es una lista vac´ o una pa- ıa vac´o? ı a labra vac´ falso si no. ıa, 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 a b: palabras anterior? orden alfab´tico, falso si no. e 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. bajal´piz?, a Devuelve la palabra cierto si el l´piz est´ abajo, a a cualquiera bl? falso si no. Devuelve la palabra cierto si la tortuga est´ visi- a visible? cualquiera ble, falso si no. 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, a cuadr´cula? ı no falso si no. Devuelve cierto si est´ activo el eje de abscisas a ejex? no (eje X), falso si no. Devuelve cierto si est´ activo el eje de ordenadas a 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.
  • 44. 44 CAP´ ITULO 5. LISTADO DE PRIMITIVAS 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 n (ver secci´n 5.5.4) o Cuerpo del procedimiento representa el conjunto de ´rdenes que conforman el pro- o cedimiento Veamos un peque˜o ejemplo: n para cuadrado repite 4 [ avanza 100 giraderecha 90 ] fin El procedimiento se llama cuadrado, y no admite nig´n argumento. u Se pueden agregar comentarios, precedi´ndolos del signo #. En el ejemplo anterior: e 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 a ejemplos de procedimientos.
  • 45. 5.5. TRABAJANDO CON PROCEDIMIENTOS Y VARIABLES 45 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 pol´gono :v´rtices [:lado 100] ı e repite :v´rtices e [ avanza :lado giraderecha 360/:v´rtices ] e fin El procedimiento se llama pol´gono, lee una variable forzosa v´rtices que debe ser in- ı e 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 u pol´gono 8 ı durante la ejecuci´n, la variable :lado se sutituye por su valor por defecto, esto es, 100, y o XLogo dibuja un oct´gono de lado 100. o Sin embargo, ejecuando (pol´gono 8 300) ı XLogo dibuja un oct´gono de lado 300. Es importante fijarse en que ahora la ejecuci´n o o se realiza encerrando las ´rdenes entre par´ntesis. Esto indica al int´rprete que se van a o e e usar variables opcionales. 5.5.5. Conceptos acerca de variables Hay dos tipos de variables: Variables globales: est´n siempre accesibles desde cualquier parte del programa. a Variables locales: s´lo son accesibles dentro del procedimiento donde fueron defi- o nidas. En esta implementaci´n del lenguaje Logo, las variables locales no son accesibles desde o 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 a b: a palabra, haz b. Si no, ser´ la variable global a la asignada a b cualquiera con el valor b. Crea una variable llamada a. Atenci´n: la varia- o local a: palabra ble no es inicializada. Para asignarle un valor, hay que usar haz. a b: a palabra, Crea una nueva variable llamada a y le asigna hazlocal b cualquiera el valor b. Define un nuevo procedimiento llamado palabra1 palabra1, provisto de las variables conteni- define, def lista2 lista3 das en lista2 y las instrucciones a ejecutar contenidas en lista3. borra, bo a: palabra Elimina el procedimiento cuyo nombre es a.
  • 46. 46 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Primitivas Argumentos Uso Reenv´ el valor de a. cosa "a y :a son nota- ıa cosa, objeto a: palabra ciones equivalentes borravariable, a: palabra Elimina la variable a. bov Elimina todas las variables y procedimientos ac- borratodo, no tuales. Enumera en una lista todos los procedimientos imts, listaprocs no actualmente definidos. imvars, listavars Enumera en una lista todas las variables actual- no mente definidas. listaspropiedades, Enumera en una lista todas las listas de propie- no listasprop dades definidas. Devuelve una lista que contiene tres sub-listas: la primera con los procedimientos definidos, la contenido no segunda con los nombres de las variables exis- tentes y la tercera con las liastas de propiedades. Ejecuta la lista de instrucciones contenida en la ejecuta a: lista lista. Ejemplos: haz "a 100 asigna 100 a la variable a define "pol´gono [nlados largo] ı [ repite :nlados [ avanza :largo giraderecha 360/:nlados ] ] Esto define un procedimiento llamado pol´gono con dos variables (:nlados y ı :largo), y permite trazar un pol´ ıgono regular donde nlados es el n´mero de u lados, y largo su tama˜o. n 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- a e cedimientos est´n recibiendo correctamente los argumentos usando la primitiva devuelve. a 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). a
  • 47. 5.6. LISTAS DE PROPIEDADES 47 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. Listas de Propiedades Desde la versi´n 0.9.92, pueden definirse Listas de Propiedades con XLogo. Cada lista o tiene un nombre espec´ ıfico y contiene varias parejas de “clave + valor”, que constan de un identificador y del elemento en s´ Es decir, son listas cuyos elementos no se etiquetan ı. mediante n´meros, sino con otro nombre. u Por ejemplo, podemos considerar una lista de propiedades llamado “coche”, que contiene la clave “color” asociado al valor “rojo”, y la clave “tipo” con el valor “4x4”. Para manejar estas listas, podemos utilizar los siguientes primitivas: ponpropiedad, ponprop Sintaxis: ponpropiedad nombre.lista clave valor A˜ade una propiedad a la lista de propiedades llamada nombre.lista. El valor ser´ n a accesible con la clave. Si no existe una lista de propiedades llamado nombre.lista entonces ser´ creada. a leepropiedad, leeprop, devuelvepropiedad Sintaxis: leepropiedad nombre.lista clave Devuelve el valor asociado a la clave de la lista de propiedades llamada nombre.lista. Si esta propiedad no existe o si no existe ninguna clave v´lida, devuelve una lista va- a c´ ıa. borrapropiedad, boprop Sintaxis: borrapropiedad nombre.lista clave Elimina la correspondiente pareja clave-valor en la lista de propiedades nombre.lista listapropiedades, listaprop Sintaxis: listapropiedades nombre.lista Muestra todos los pares clave-valor que figuran en la lista de propiedades llamada listapropiedades
  • 48. 48 CAP´ ITULO 5. LISTADO DE PRIMITIVAS borralistapropiedades, bolisprop Sintaxis: borralistapropiedades "nombre.lista o borralistapropiedades [ lista.de.nomb ] Borra la/s lista/s indicada/s con su nombre o en la lista Vamos a volver a la lista de propiedades llamada “coche”. # Llenado de la Lista de Propiedades ponpropiedad "Coche "Color "Rojo ponpropiedad "Coche "Tipo "4x4 ponpropiedad "Coche "Vendedor "Citroen # Mostrar un valor escribe leepropiedad "Coche "Color ---> Rojo # Mostrar todos los elementos escribe listapropiedades "Coche ---> Color Roja Tipo 4x4 Vendedor Citroen 5.7. Manejo de archivos Primitivas Argumentos Uso Lista el contenido del directorio actual. (Equiva- cat´logo, cat a 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, palabra o a: 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) 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 e n: n´mero, u 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. u 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 u del fichero
  • 49. 5.7. MANEJO DE ARCHIVOS 49 Primitivas Argumentos Uso Abre el flujo cuyo identificador es n, despu´s lee e un caracter del fichero. Esta primitiva devuelve el leecarflujo n: n´mero u n´mero correspondiente al caracter unicode (como u leecar - sec. 10.1) Escribe la l´ınea de texto indicada en l al princi- n: n´mero, u pio del fichero indicado por el flujo n. Atenci´n: la o 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, u fichero indicado por el flujo n. Atenci´n: la escritu- o agregalineaflujo l: lista ra no se hace efectiva hasta que se ciera el fichero con cierraflujo. cierraflujo n: n´mero u Cierra el flujo n. Devuelve cierto si se ha llegado al final del fichero, finflujo? n: n´mero u 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 unicos formatos soportados son jpg y png. o ´ La ruta debe especificarse previamente con pondirectorio y debe ser absoluta, empezando en el nivel superior del ´rbol de directorios. Ejemplo: a pondirectorio [/home/alumnos/mis imagenes] cargaimagen "turtle.jpg Ejemplos: guarda "trabajo.lgo [proc1 proc2 proc3] guarda en el directorio ac- tual un archivo llamado trabajo.lgo que contiene los procedimientos proc1, proc2 y proc3. guardatodo "trabajo.lgo guarda en el directorio actual un archivo lla- mado trabajo.lgo que contiene la totalidad de los procedimientos actual- mente definidos. En ambos casos, si no se indica la extensi´n .lgo, ser´ a˜adida. La palabra o a n 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 trabajo.lgo, debes usar: borratodo carga "trabajo.lgo La palabra especifica una ruta relativa a partir del directorio corriente. No fun- ciona colocar una ruta absoluta.
  • 50. 50 CAP´ ITULO 5. LISTADO DE PRIMITIVAS Ejemplo 2: El objetivo es crear el fichero ejemplo en el directorio personal: /home/tu_nombre, en Linux, C:, en windows que contiene: ~ ABCDEFGHIJKLMNNOPQRSTUVWXYZ abcdefghijklm~nopqrstuvwxyz n 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~OPQRSTUVWXYZ] N escribelineaflujo 2 [abcdefghijklmn~opqrstuvwxyz] n escribelineaflujo 2 [0123456789] # cerramos el flujo para acabar la escritura cierraflujo 2 Ahora, comprobamos que est´ bien escrito: a # 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 5.8. Funci´n avanzada de relleno o Las primitivas rellena y rellenazona permiten pintar una figura. Se pueden com- parar a la funci´n “rellena” disponible en la mayor´ de los programas de dibujo. Esta o ıa funcionalidad se extiende hasta los m´rgenes del ´rea de dibujo. Hay tres reglas a tener en a a cuenta para usar correctamente estas primitivas: 1. El l´piz debe estar bajo (bl). a
  • 51. ´ 5.8. FUNCION AVANZADA DE RELLENO 51 2. La tortuga no debe estar sobre un punto del mismo color que se usar´ para rellenar. a (Si quieres pintar rojo, la tortuga no puede estar sobre un punto rojo). 3. Observar si cuadr´cula est´ o no activada. ı a 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 a hasta llegar a una frontera de cualquier color (incluida la cuadr´ ıcula). ´ Supongamos que tenemos este dibujo en el Area de Dibujo: y tecleamos: poncolorl´piz 1 a rellena produce: es decir, ha coloreado de rojo la regi´n cerrada en la que se encuentra la tortuga. o Sin embargo, si hacemos: poncolorl´piz 0 a rellenazona se obtiene: 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 semic´rculo de diametro :c ı
  • 52. 52 CAP´ ITULO 5. LISTADO DE PRIMITIVAS 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 subel´piz giraderecha 90 retrocede 150 a giraizquierda 90 avanza 20 bajal´piz a repitepara [color 0 6] [ poncolorl´piz (6-:color) rellena a subel´piz giraderecha 90 avanza 20 a giraizquierda 90 bajal´piz ] a fin o bien, m´s realista: a para arcoiris2 borrapantalla ocultatortuga arcohueco 400 subel´piz giraderecha 90 retrocede 150 a giraizquierda 90 avanza 20 bajal´piz a 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] [ poncolorl´piz elemento :colores :color rellena a subel´piz giraderecha 90 avanza 20 giraizquierda 90 bajal´piz ] a a fin
  • 53. 5.9. COMANDOS DE RUPTURA DE SECUENCIA 53 5.9. 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´ en un bucle repite o mientras, el programa sale del bucle a ıdo inmediatamente. • Si est´ en un procedimiento, este es terminado. a detienetodo interrumpe total y definitivamente todos los procedimientos en ejecu- ci´n o devuelve (dev) permite salir de un procedimiento “llev´ndose” un resultado. a Al final del manual hay numerosos ejemplos con el uso de estas primitivas.
  • 54. Cap´ ıtulo 6 Condicionales La primitiva b´sica que define el condicional en XLogo es si. Su uso es simple: a si expresi´n_l´gica [comandos] o o que ejecuta comandos unicamente cuando expresi´n_l´gica sea cierto, o bien: ´ o o si expresi´n_l´gica [comandos1] [comandos2] o o donde comandos1 y comandos2 son, respectivamente, las ´rdenes a ejecutar en los casos en o los que expresi´n_l´gica sea cierto o falso. o o Ejemplos: Procedimiento que compara un n´mero dado con 4 y contesta MAYOR si el u n´mero es mayor que 4: u para mayor :X si :x > 4 [escribe "MAYOR] fin Procedimiento que compara un n´mero con 4, para ver si es mayor que 4 u o no lo es: para compara :X si :x > 4 [escribe "SI] [escribe "NO] fin Si queremos que los argumentos para cierto y falso est´n guardados en sendas varia- e bles, no podemos usar si. En este caso, la primitiva correcta es: sisino En este ejemplo, XLogo mostrar´ un error: a haz "Opcion_1 [escribe "cierto] haz "Opcion_2 [escribe "falso] si 1 = 2 :a :b ya que la segunda lista nunca ser´ evaluada: a ¿Qu´ hacer con [escribe "falso]? e La sintaxis correcta es: 54
  • 55. 55 haz "Opcion_1 [escribe "cierto] haz "Opcion_2 [escribe "falso] sisino 1 = 2 :a :b que devolver´: a "falso
  • 56. Cap´ ıtulo 7 Bucles y recursividad XLogo tiene cinco primitivas que permiten la construcci´n de bucles: repite, repitepara, o mientras, paracada y repitesiempre. 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 u ejecutarse. El int´rprete XLogo ejecutar´ la secuencia de comandos de la lista n veces. e a Esto evita copiar los mismos comandos repetidas veces. Ejemplos: repite 4 [avanza 100 giraderecha 90] # un cuadrado de lado 100 repite 6 [avanza 100 giraderecha 60] # un hex´gono de lado 100 a repite 360 [avanza 2 giraderecha 1] # abreviando, casi un c´rculo ı 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 u o o a el 1) repite 3 [escribe cuentarepite] repite 3 [escribe contador] proporcionan ambas 1 2 3 56
  • 57. 7.2. BUCLE CON REPITEPARA 57 7.2. Bucle con repitepara repitepara hace el papel de los bucles for en otros lenguajes de programaci´n. Consiste o en asignar a una variable un n´mero determinado de valores comprendidos en un intervalo u y con un incremento (paso) dados. Su sintaxis es: repitepara [ lista1 ] [ lista2 ] La lista1 contiene tres par´metros: el nombre de la variable y los l´ a ımites inferior y superior del intervalo asignado a la variable. Puede a˜adirse un cuarto argumento, que determinar´ n ıa el incremento (el paso que tendr´ la variable); si se omite, se usar´ 1 por defecto. ıa a Ejemplo 1: repitepara [i 1 4] [escribe :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 u 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 e a o todo el tiempo que lista_a_evaluar devuelva cierto. Ejemplos:
  • 58. 58 CAP´ ITULO 7. BUCLES Y RECURSIVIDAD mientras ["cierto] [giraderecha 1] # La tortuga gira sobre si misma eternamente. # Este ejemplo deletrea el alfabeto en orden inverso: haz "lista1 "abcdefghijklmn~opqrstuvwxyz n mientras [no vac´o? :lista1] ı [escribe ´ltimo :lista1 haz "lista1 menos´ltimo :lista1] u u 7.4. Bucle con paracada La sintacis de paracada es: paracada nombre_variable lista_o_palabra [ lista_de_comandos ] La variable va tomando como valores los elementos de la lista o los caracteres de la palabra, y las ´rdenes se repiten para cada calor adquirido. o Ejemplos: paracada "i "XLogo [escribe :i] muestra: X L o g o paracada "i [a b c] [escribe :i] muestra: a b c haz "suma 0 paracada "i 12345 [haz "suma :suma+:i] muestra: 15 (la suma de los d´ ıgitos de 12345)
  • 59. 7.5. BUCLE CON REPITESIEMPRE 59 7.5. Bucle con repitesiempre Aunque un bucle como este es muy peligroso en programaci´n, ya vimos al explicar el o bucle mientras un ejemplo donde puede simularse un bucle infinito. La sintaxis es: repitesiempre [ lista_de_comandos ] El ejemplo anterior ser´ ıa: repitesiempre [giraderecha 1] # La tortuga gira sobre si misma eternamente. De nuevo: Mucho cuidado al usar bucles infinitos 7.6. 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 a n! = n * (n - 1) * ...* 3 * 2* 1, podemos hacer: n! = 1 si n = 0 n · (n − 1)! si n = 0 ∀n ∈N En XLogo: para factorial :n´mero u si :n´mero = 0 u [ devuelve 1 ] [ devuelve :n´mero * factorial (:n´mero - 1) ] u u fin Un segundo ejemplo recursivo es la espiral: para espiral :lado si :lado > 1250 [ alto ] [ avanza :lado / 500 giraderecha 1 espiral :lado + 1 ] fin
  • 60. Cap´ ıtulo 8 Modo multitortuga Se pueden tener varias tortugas activas en pantalla. Nada m´s iniciarse XLogo, s´lo a o hay una tortuga disponible. Su n´mero es 0. Si quieres “crear” una nueva tortuga, puedes u usar la primitiva pontortuga seguida del n´mero de la nueva tortuga. Para evitar confu- u si´n, la nueva tortuga se crea en el centro y es invisible (tienes que usar muestratortuga o para verla). As´ la nueva tortuga es la activa, y ser´ la que obedezca las cl´sicas primiti- ı, a a vas mientras no cambies a otra tortuga con pontortuga. El m´ximo n´mero de tortugas a u disponibles puede fijarse en el men´ Herramientas → Preferencias. u Estas son las primitivas que se aplican al modo multitortuga: Primitiva Argumentos Uso La tortuga n´mero a es ahora la tortuga activa. u pontortuga, a: n´mero u Por defecto, cuando XLogo comienza, est´ activa a ptortuga la tortuga n´mero 0. u tortuga no Da el n´mero de la tortuga activa. u Da una lista que contiene todos los n´meros de u tortugas no tortuga actualmente en pantalla. eliminatortuga a: n´mero u Elimina la tortuga n´mero a u ponmaximastortugas, n: n´mero u Fija el m´ximo n´mero de tortugas a u pmt maximastortugas, no Devuelve el m´ximo n´mero de tortugas a u maxt 60
  • 61. Cap´ ıtulo 9 Tocar m´ sica (MIDI) u Ya comentamos anteriormente (secci´n 3.3) que la versi´n para Windows de jre no in- o o corpora las API (Application Programming Interface – Interfaz de Programaci´n de Aplica- o ciones) que contienen los instrumentos y que deben ser instaladas manualmente (Preguntas frecuentes, 15.1). Es importante recordarlo porque, si no lo haces, con la instalaci´n por o defecto de Java no tendr´s instrumentos disponibles. a Las primitivas que nos ocupan son: Primitivas Argumentos Uso Carga en memoria la secuencia inclu´ en la lista. ıda secuencia, sec a: lista Siguiendo a esta tabla, se indica c´mo escribir una o secuencia de notas m´sicales. u tocam´sica u no Toca la secuencia de notas en memoria. instrumento, Da el n´mero que corresponde al instrumento ac- u no instr tualmente seleccionado. Queda seleccionado el instrumento n´mero a. Pue- u poninstrumento, des ver la lista de instrumentos disponibles en el a: n´mero u pinstr men´ Herramientas → Preferencias → Soni- u do. indicesecuencia, Da la posici´n del puntero en la secuencia corrien- o no indsec te. ponindicesecuencia, Pone el puntero en la posici´n a de la secuencia o a: n´mero u 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 u secuencia. Para crear una secuencia, puedes usar la primitiva sec o secuencia. Para crear una secuencia v´lida, hay que seguir las siguientes reglas: a 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 - 61
  • 62. 62 CAP´ ´ ITULO 9. TOCAR MUSICA (MIDI) 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. e a a Por defecto, todas las notas tienen una duraci´n uno. Si quieres aumentar o disminuir la o duraci´n, debes escribir un n´mero correspondiente. o u Ejemplos: secuencia [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). a o o a Otro ejemplo: para partitura # crea la secuencia de notas secuencia [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 ] secuencia [:+ 1 re 0.5 re do 1 :- si 0.5 la si 1 :+ do re 2 :- la ] secuencia [:+ 1 re 0.5 re do 1 :- si 0.5 la si 1 :+ do re 2 :- la ] secuencia [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 las primitivas: u partitura tocam´sica. u Ahora veamos una aplicaci´n interesante de la primitiva ponindicesecuencia: o borrasecuencia # 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. tocam´sica u # Grandioso! Tambi´n puedes elegir un instrumento con la primitiva poninstrumento o en el men´ He- e u rramientas → Preferencias → Sonido. Encontrar´s la lista de instrumentos disponibles a asociados a un n´mero. (Si usas Windows, echa un vistazo a las Preguntas Frecuentes si u no lo has hecho a´n) u
  • 63. 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 o trav´s de 3 primitivas: tecla?, leecar y leelista. e tecla?: Da cierto o falso seg´n se haya pulsado o no alguna tecla desde que se u inici´ la ejecuci´n del programa. o o 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 ultima tecla que haya sido pulsada. ´ Estos son los valores que dan ciertas teclas: A → 65 B → 66 C → 67 ... Z → 90 → -37 ´ -226 o → -38 ´ -224 o → -39 ´ -227 o → -40 ´ -225 o 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. e a a leelista [t´tulo] "palabra o leeteclado [t´tulo] "palabra: Presenta una ca- ı ı ja de di´logo titulada t´tulo. El usuario puede escribir un texto en el ´rea de entrada, a ı a y esta respuesta se guardar´ seleccionando autom´ticamente si en forma de n´mero a a u o de lista en la variable :palabra cuando se haga click en el bot´n OK. o Las primitivas caracter, (su forma corta es car y cuyo argumento es n: un n´mero) y u unicode "a, devuelven, respectivamente, el car´cter unicode que corresponde al n´mero n a u y el n´mero unicode que corresponde al car´cter a. u a Ejemplo: unicode "A devuelve 65 caracter 125 devuelve } 63
  • 64. 64 CAP´ ITULO 10. RECIBIR ENTRADA DEL USUARIO Ejemplos: para edades leelista [¿Qu´ edad tienes?] "edad e 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 o Durante la ejecuci´n del programa, se pueden recibir eventos del rat´n a trav´s de tres o o e primitivas: leerat´n, rat´n? y posrat´n. o o o leerat´n: el programa espera hasta que el usuario hace un click o un movimiento. o Entonces, devuelve un n´mero que representa ese evento. Los posibles valores son: u • 0 → El rat´n se movi´. o o • 1 → Se hizo un click izquierdo. • 2 → Se hizo un click central (se usa en Linux). • 3 → Se hizo un click derecho. posrat´n: Da una lista que contiene la posici´n actual del rat´n. o o o rat´n?: Devuelve cierto o falso seg´n toquemos o no el rat´n desde que comienza o u o la ejecuci´n del programa o Ejemplos: En este primer procedimiento, la tortuga sigue los movimientos del rat´n por la pantalla. o para seguir # cuando el rat´n se mueve, la tortuga cambia de posici´n o o si leerat´n=0 [ponposici´n posrat´n] o o o seguir fin
  • 65. ´ 10.2. INTERACTUAR CON EL RATON 65 Este segundo procedimiento es similar, pero hay que hacer click izquierdo para que la tor- tuga se mueva.: para seguir2 si leerat´n = 1 [ponposici´n posrat´n] o o o seguir2 fin En este tercer ejemplo, hemos creado dos botones rosa. Si hacemos click izquierdo, la tortuga dibuja un cuadrado de lado 40. Si hacemos click derecho, la tortuga dibuja un peque˜o c´ n ırculo. Por ultimo si hacemos click derecho en el bot´n derecho, se detiene el ´ o programa. para bot´n o # crea un bot´n rectangular color rosa, de 50 x 100 o repite 2 [ avanza 50 giraderecha 90 avanza 100 giraderecha 90 ] giraderecha 45 subelapiz avanza 10 bajal´piz poncolorl´piz [255 153 153] a a rellena retrocede 10 giraizquierda 45 bajal´piz poncolorl´piz 0 a a fin para empieza borrapantalla bot´n subel´piz ponposici´n [150 0] o a o bajal´piz bot´n subel´piz ponposici´n [30 20] bajal´piz a o a o a rotula "Cuadrado subel´piz ponposici´n [180 20] a o bajal´piz rotula ¸´rculo a Cı subel´piz ponposici´n [0 -100] bajal´piz a o a rat´n o fin para rat´n o # ponemos el valor de leerat´n en la variable ev o # ponemos la primera coordenada en la variable x # ponemos la segunda coordenada en la variable y
  • 66. 66 CAP´ ITULO 10. RECIBIR ENTRADA DEL USUARIO haz "ev leerat´n o haz "x elemento 1 posrat´n o haz "y elemento 2 posrat´n o # 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] ] rat´n o fin para circunferencia repite 90 [avanza 1 giraizquierda 4] giraizquierda 90 subel´piz avanza 40 giraderecha 90 bajal´piz a a fin para cuadrado repite 4 [avanza 40 giraderecha 90] giraderecha 90 avanza 40 giraizquierda 90 fin 10.3. Componentes Gr´ficos a o n a ´ Desde la versi´n 0.9.90, XLogo permite a˜adir componentes gr´ficos en el Area de di- bujo (botones, men´s, . . . ) u 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). a 10.3.1. Crear un componente gr´fico a La secuencia de pasos que debes seguir es: Crear → Modificar sus propiedades o ´ ısticas → Mostrarlo en el Area de dibujo. caracter´ Crear un Bot´n o Usaremos al primitiva botonigu, cuya sintaxis es: # Esta primitiva crea un bot´n llamado b o # y cuya leyenda es: Click botonigu "b "Click Crear un Men´ u Disponemos de la primitiva menuigu, cuya sintaxis es: # Esta primitiva crea un men´ llamado m u # y que contiene 3 opciones: opci´n1, opci´n2 y opci´n3 o o o menuigu "m [opci´n1 opci´n2 opci´n3] o o o
  • 67. ´ 10.3. COMPONENTES GRAFICOS 67 Modificar las propiedades del componente gr´fico a posicionigu determina las coordenadas donde se colocar´ el elemento gr´fico. Por a a ejemplo, para colocar el bot´n definido antes en el punto de coordenadas (20 , 100), o escribiremos: posicionigu "b [20 100] Si no se especifica la posici´n, el objeto ser´ colocado por defecto en la esquina superior o a ´ izquierda del Area de dibujo. Eliminar un componente gr´fico a La primitiva eliminaigu elimina un componente gr´fico. Para eliminar el bot´n anterior a o eliminaigu "b Definir acciones asociadas a un componente gr´fico a La primitiva accionigu, define una acci´n asociada al componente, y que se realizar´ o a cuando el usuario interact´a con ´l. u e # Que la tortuga avance 100 al pulsar el boton "b accionigu "b [avanza 100 ] # En el men´, cada opci´n indica su acci´n u o o accionigu "m [[escribe "Opci´n1] [escribe "Opci´n2] [escribe "Opci´n3]] o o o Dibujar el componente gr´fico a ´ La primitiva dibujaigu, muestra el componente gr´fico en el Area de dibujo. Para a mostrar el bot´n que estamos usando como ejemplo: o dibujaigu "b Corrijamos el ejemplo anterior utilizando las nuevas primitivas: para empieza botonigu "Boton.Circ "C´rculo ı botonigu "Boton.Cuad "Cuadrado posicionigu "Boton.Circ [50 100] posicionigu "Boton.Cuad [-150 100] accionigu "Boton.Circ [ circunferencia ]
  • 68. 68 CAP´ ITULO 10. RECIBIR ENTRADA DEL USUARIO accionigu "Boton.Cuad [ cuadrados ] dibujaigu "Boton.Circ dibujaigu "Boton.Cuad fin para circunferencia repite 90 [av 1 gi 4] giraizquierda 90 subel´piz avanza 40 giraderecha 90 bajal´piz a a fin para cuadrado repite 4 [avanza 40 giraderecha 90] giraderecha 90 avanza 40 giraizquierda 90 fin
  • 69. Cap´ ıtulo 11 Gesti´n de tiempos o 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). o u Primitivas Argumentos Uso n: n´mero u Hace una pausa en el programa, la tortuga espera espera entero (n/60) segundos. Inicia un conteo descendiente de n segundos. Para cron´metro, o n: n´mero u saber que la cuenta ha finalizado, disponemos de crono entero la primitiva fincrono? fincron´metro?, o Devuelve "cierto si no hay ning´n conteo activo. u no fincrono? Devuelve "falso si el conteo no ha terminado. Devuelve una lista compuesta de 3 n´meros ente- u ros que representan la fecha del sistema. El primero fecha no indica el d´ el segundo el mes y el ultimo el a˜o. ıa, ´ n [d´a mes a~o] ı n Devuelve una lista compuesta de 3 n´meros ente- u ros que representan la hora del sistema. El primero hora no representa las horas, el segundo los minutos y el ul- ´ 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 ] 69
  • 70. 70 CAP´ ´ ITULO 11. GESTION DE TIEMPOS haz "s ultimo :ho # muestra dos cifras para los segundos si :s - 10 < 0 [ haz "s palabra 0 :s ] rotula (palabra :h ": :m ": :s) crono 5 ] reloj fin
  • 71. Cap´ ıtulo 12 Utilizaci´n de la red con XLogo o 12.1. La red: ¿c´mo funciona eso? o En primer lugar es necesario explicar los conceptos b´sicos de la comunicaci´n en una a o red para usar correctamente las primitivas de XLogo. Figura: noci´n de red o Dos ordenadores pueden comunicarse a trav´s de una red si est´n equipados con una e a tarjeta de red (llamada tambi´n tarjeta ethernet). Cada ordenador se identifica por una e direcci´n personal: su direcci´n I.P. Esta direcci´n IP consta de cuatro n´meros enteros o o o u comprendidos entre 0 y 255 separados por puntos. Por ejemplo, la direcci´n IP del primer o ordenador del esquema de la figura es 192.168.1.1 Dado que no es f´cil acordarse de este tipo de direcci´n, tambi´n se puede hacer corres- a o e ponder a cada direcci´n IP un nombre m´s f´cil de recordar. Sobre el esquema anterior, o a a podemos comunicar con el ordenador de la derecha bien llam´ndolo por su direcci´n IP: a o 192.168.1.2, o llam´ndolo por su nombre: tortuga. a No nos extendamos m´s sobre el significado de estos n´meros. A˜adamos unicamente a u n ´ una cosa que es interesante saber, el ordenador local en el cual se trabaja tambi´n se e identifica por una direcci´n: 127.0.0.1. El nombre que se asocia con ´l es habitualmente o e localhost. 12.2. Primitivas orientadas a la red XLogo dispone de 4 primitivas que permiten comunicarse a trav´s de una red: escuchatcp, e ejecutatcp, chattcp y enviatcp. En los ejemplos siguientes, mantendremos el esquema de red de la subsecci´n anterior. o 71
  • 72. 72 CAP´ ´ ITULO 12. UTILIZACION DE LA RED CON XLOGO escuchatcp: esta primitiva es la base de cualquier comunicaci´n a trav´s de la red. o e No espera ning´n argumento. Permite poner al ordenador que la ejecuta a la espera u 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- o bre del ordenador de destino (el que va a ejecutar las ´rdenes), la lista contiene las o 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 "192.168.2.2 [repite 4 [avanza 100 giraderecha 90]] o 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. o Sintaxis: chattcp palabra lista → La palabra indica la direcci´n IP o el nombre o 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 "192.168.1.2 [buenos d´as]. ı Una ventana se abre en cada uno de los ordenadores para permitir la conversaci´n o enviatcp: env´ datos hacia un ordenador de la red. ıa Sintaxis: enviatcp palabra lista → La palabra indica la direcci´n IP o el nom- o 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 a a una variable o mostrarse en el Hist´rico de comandos. o Ejemplo: tortuga quiere enviar a liebre la frase "3.14159 casi el n´mero pi". u 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], u liebre mostrar´ la frase, pero en tortuga aparecer´ el mensaje: a a ¿Qu´ hacer con [ Si ] ? e Deber´ıamos escribir: es enviatcp "liebre [3.14159 casi el n´mero pi] u o haz "respuesta enviatcp "liebre [3.14159 casi el n´mero pi] u En el primer caso, el Hist´rico de comandos mostrar´ Si, y en el segundo "respuesta o a contendr´ la lista [ Si ], como podemos comprobar haciendo a es lista? :respuesta
  • 73. 12.2. PRIMITIVAS ORIENTADAS A LA RED 73 cierto es :respuesta Si Con esta primitiva se puede establecer comunicaci´n con un robot did´ctico a trav´s o a e 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. a Un peque˜o truco: lanzar dos veces XLogo en un mismo ordenador. n En la primera ventana, ejecuta escuchatcp. En la segunda, ejecuta ejecutatcp "127.0.0.1 [repite 4 [avanza 100 giraderecha 90]] ¡As´ puedes mover a la tortuga en la otra ventana! (¡Ah s´ esto es as´ porque 127.0.0.1 ı ı!, ı indica tu direcci´n local, es decir, de tu propio ordenador) o
  • 74. 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 subel´piz a giraizquierda 30 retrocede (:c*20) giraderecha 90 avanza (:c*22) giraizquierda 90 bajal´piz a fin para casas borrapantalla ocultatortuga subel´piz a giraizquierda 90 avanza 200 giraderecha 90 bajal´piz a repitepara [n 3 7 2] [ casa :n colocar :n ] casa 10 fin 74
  • 75. ´ ´ 13.2. DIBUJAR UN RECTANGULO SOLIDO 75 13.2. Dibujar un rect´ngulo s´lido a o 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 para factorial :n si :n = 1 [devuelve 1] [devuelve :n * factorial (:n - 1)] fin
  • 76. 76 CAP´ ITULO 13. EJEMPLOS DE PROGRAMAS Ejemplo: escribe factorial 5 --> 120.0 escribe factorial 6 --> 720.0 13.4. Copo de nieve (Gracias a Georges No¨l) e 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 13.5. Escritura para escribir ocultatortuga
  • 77. ´ ´ 13.6. CONJUGACION (SOLO VERBOS REGULARES) 77 repite 40 [ avanza 30 giraderecha 9 poncolorlapiz azar 7 rotula [XLogo es genial!] ] fin 13.6. Conjugaci´n (s´lo verbos regulares) o o 13.6.1. Primera versi´n o para futuro :verbo es frase "yo palabra :verbo "´ e es frase "t´ palabra :verbo "´s u a es frase "´l palabra :verbo "´ e a es frase "nosotros palabra :verbo "emos es frase "vosotros palabra :verbo "´is e es frase "ellos palabra :verbo "´n a fin Ejemplo: futuro "amar yo amar´ e t´ amar´s u a e ´l amar´ a nosotros amaremos vosotros amar´is e ellos amar´n a
  • 78. 78 CAP´ ITULO 13. EJEMPLOS DE PROGRAMAS 13.6.2. Segunda versi´n o para futuro :verbo haz "pronombres [yo t´ ´l nosotros vosotros ellos] u e haz "terminaciones [´ ´s ´ emos ´is ´n] e a a e a repitepara [i 1 6] [ es fr elemento :i :pronombres palabra :verbo elemento :i :terminaciones ] fin Ejemplo: futuro "amar yo amar´ e t´ amar´s u a e ´l amar´ a nosotros amaremos vosotros amar´is e ellos amar´n a 13.6.3. Tercera versi´n (con recurrencia) o para futuro :verbo haz "pronombres [yo t´ ´l nosotros vosotros ellos] u e haz "terminaciones [´ ´s ´ emos ´is ´n] e a a e a 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´ e t´ amar´s u a e ´l amar´ a nosotros amaremos vosotros amar´is e ellos amar´n a 13.7. Colores 13.7.1. Introducci´n o Primero, algunas aclaraciones: Habr´s visto en la secci´n 5.1.4 que el comando poncl a o puede tomar como argumento tanto un n´mero como una lista. Aqu´ nos centraremos en u ı codificar valores RVA. Cada color en XLogo est´ codificado usando tres valores: rojo, a verde y azul, de ah´ RVA (RGB en ingl´s). ı e Estos tres n´meros conforman una lista que es argumento de la primitiva poncl, por u lo que representan respectivamente los componentes rojo, verde y azul de un color. Esta
  • 79. 13.7. COLORES 79 manera de codificar no es muy intuitiva, as´ que para tener una idea del color que obtendr´s ı a puedes usar la caja de di´logo Herramientas → Elegir color del l´piz. a a Sin embargo, usando esta forma de codificar colores, se hace muy f´cil transformar una a 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: a (0 + 100 + 80)/3 = 60, y asignamos el color [60 60 60] a este punto. Esta operaci´n o debe ser realizada para cada punto de la imagen. 13.7.2. Pr´ctica: Escala de grises a 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: ı a o http://xlogo.tuxfamily.org/images/transfo.png 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´ a ı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 a tres [r v a] valores. Aqu´ est´ el c´digo principal: (No olvides cambiar la ruta del archivo ı a o en el procedimiento!) para transform # Debes cambiar la ruta de la imagen transfo.png # Ej: cargaimagen [/home/usuario/imagenes/transfo.png] borrapantalla ocultatortuga pondirectorio "/home/usuario/imagenes cargaimagen "transfo.png 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 haz "v primero :lista1 haz "lista1 menosprimero :lista1 haz "a primero :lista1 haz "color redondea (:r+:v+:a)/3
  • 80. 80 CAP´ ITULO 13. EJEMPLOS DE PROGRAMAS 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 u 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 unicamente el pro- o ´ cedimiento pixel, pero veamos un procedimiento recursivo: para transform2 # Debes cambiar la ruta de la imagen transfo.png # Ej: c:Mis DocumentosMis imagenestransfo.png borrapantalla ocultatortuga pondirectorio "c:Mis DocumentosMis imagenes cargaimagen "transfo.png 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 haz "v primero :lista1 haz "lista1 menosprimero :lista1 haz "a primero :lista1 devuelve frase (255 - :r) frase (255 - :v) (255 - :a)
  • 81. 13.8. LISTAS (GRACIAS A OLIVIER SC) 81 fin 13.8. Listas (Gracias a Olivier SC) Supongo que apreciar´s este hermoso programa: a 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 165 mas 561 igual a 726 726 mas 627 igual a 1353 1353 mas 3531 igual a 4884 4884
  • 82. 82 CAP´ ITULO 13. EJEMPLOS DE PROGRAMAS 13.9. Un lindo medall´n o 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
  • 83. Cap´ ıtulo 14 Acerca de XLogo 14.1. Desinstalar Para desinstalar XLogo, todo lo que hace falta es borrar el archivo XLogo.jar y el archivo de configuraci´n .xlogo que se encuentra en /home/tu_nombre en Linux, o o c:windows.xlogo en Windows. 14.2. El sitio Para conseguir la ultima versi´n y correcci´n de errores, visita el sitio de XLogo de ´ o o vez en cuando: http://xlogo.tuxfamily.org Si´ntete libre de contactar al autor si tienes alg´n problema con la instalaci´n o el uso. e u o Toda sugerencia ser´ bienvenida. a 14.3. Acerca de este documento XLogo: Manual del Usuario Original en franc´s revisado por Lo¨ (18 de Febrero de 2008). e ıc n ´ Traducido al espa˜ol por Marcelo Duschkin y Alvaro Vald´s (14 de junio de 2008) e Kevin Donnelly: traducci´n al ingl´s del manual, y traducci´n al gal´s del programa. o e o e Agradecimientos Olivier SC: por sus sugerencias, y por las invalorables pruebas que me permitieron depurar el int´rprete XLogo. e 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. n o o 83
  • 84. Cap´ ıtulo 15 Carnaval de Preguntas – Artima˜ as – n Trucos que conocer 15.1. Preguntas frecuentes Por m´s que borro un procedimiento en el Editor, reaparece todo a el tiempo! Cuando se sale del Editor, ´ste se limita unicamente a guardar o poner al d´ los e ´ ıa procedimientos definidos en ´l. La unica forma de borrar un procedimiento en XLogo es e ´ utilizar la primitiva borra o bo. Ejemplo: borra "toto → borra el procedimiento toto ¿C´mo hago para escribir r´pidamente una orden utilizada pre- o a viamente? Primer m´todo: con el rat´n, haz click en la zona del Hist´rico sobre la l´ e o o ınea deseada. As´ reaparecer´ inmediatamente en la L´ ı a ınea de Comando Segundo m´todo: con el teclado, las flechas Arriba y Abajo permiten navegar por la e lista de los comandos anteriores (m´s pr´ctico) a a En la opci´n Sonido del cuadro de di´logo Preferencias, no hay o a disponible ning´ n instrumento u Como dec´ ıamos en la secci´n 3.3, esto se debe a que la versi´n de Java para Windows o o no incluye los bancos de sonido, y deben instalarse manualmente. En primer lugar, hay que descargarlos desde: http://java.sun.com/products/java-media/sound/soundbank-min.gm.zip la versi´n m´ o ınima (unos 350 kb), http://java.sun.com/products/java-media/sound/soundbank-mid.gm.zip la versi´n intermedia (algo m´s de 1 Mb) y o a http://java.sun.com/products/java-media/sound/soundbank-deluxe.gm.zip la versi´n de luxe (casi 5 Mb). o Una vez descargados, debemos descomprimirlos en el directorio audio de la instalaci´n o Java que, dependiendo de la versi´n, puede ser: o 84
  • 85. 15.1. PREGUNTAS FRECUENTES 85 C:Archivos de programaJavajre1.6.0libaudio creando el directorio audio si ´ste no existe. e Hecho esto, la lista de instrumentos estar´ disponible. a Tengo problemas de refresco de pantalla cuando la tortuga dibuja! Problema tambi´n conocido y t´ e ıpico de JRE >1.4.2. intentar´ ponerle remedio en lo e sucesivo, quiz´ pueda hacer algo. Dos soluciones por el momento: a Minimizar la ventana y volver a aumentarla (restaurarla) Utilizar siempre la versi´n m´s moderna de Java. o a Utilizo la versi´n en Esperanto, pero no puedo escribir los carac- o teres especiales Cuando escribes en la L´ ınea de comandos o en el Editor, si haces click con el bot´n o derecho del rat´n, aparece un men´ contextual. En ese men´ se encuentran las funcio- o u u nes habituales de Edici´n (copiar, cortar, pegar) y los caracteres especiales del Esperanto o cuando se selecciona ese idioma. Utilizo la versi´n en Espa˜ ol, y no puedo utilizar las primitivas o n animacion, division, separacion y ponseparacion Corregido desde la versi´n 0.9.20e. Para versiones anteriores de XLogo: o animacion, se escribe animacicn, con “c” en lugar de “o”. division, separacion y ponseparacion se escriben con tilde: divisi´n, separaci´n o o y ponseparaci´n. o Obviamente, el mejor consejo es que actualices a la versi´n m´s moderna de XLogo. o a 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: o Utiliza la versi´n xlogo-new.jar tambi´n disponible en nuestra web. o e 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 xlogo.jar.
  • 86. 86CAP´ ˜ ITULO 15. CARNAVAL DE PREGUNTAS – ARTIMANAS – TRUCOS QUE CONOCER 15.2. ¿C´mo puedo ayudar? o Inform´ndome de todos los errores (“bugs”) que encuentres. Si puedes reproducir a sistem´ticamente un problema detectado, mejor a´n a u Toda sugerencia dirigida a mejorar el programa es siempre bienvenida Ayudando con las traducciones, en particular el ingl´s . . . e Las palabras de ´nimo siempre vienen bien a
  • 87. ´ Indice alfab´tico e #, 44 Argumentos, 19 π, 39 Argumentos Opcionales, 19 *, 39 asen, 39 +, 39 Aspecto, 14 -, 39 atan, 39 /, 39 av, 24, 29 <, 22 avanza, 24, 29 <=, 22 Ayuda, 17 =, 23 azar, 39 >, 22 azul, 36 >=, 22 azuloscuro, 36 ?, 43 &, 23 backslash, 21 , 21 bajal´piz, 26 a n, 21 bajal´piz?, 43 a , 21 bajanariz, 29 3d, 28 balanceaderecha, 29 balanceaizquierda, 29 abreflujo, 48 balanceo, 31 Abrir, 11 Barra invertida, 21 absoluto, 39 bd, 29 abs, 39 bi, 29 accionigu, 67 bl, 26 Acentuaci´n y tildes, 23 o bl?, 43 Acerca de ..., 18 blanco, 36 acos, 39 bn, 29 adi´s, 12 o bo, 45 agrega, 42 bolisprop, 48 agregalineaflujo, 49 Booleano, 38 Alto, 7 boprop, 47 alto, 53 borra, 9, 45 amarillo, 35 borracuadr´cula, 24 ı Animaci´n, 36 o borraejes, 25 animaci´n, 36 o borralistapropiedades, 48 anterior?, 43 borrapantalla, 27 antes?, 43 borrapropiedad, 47 arco, 28, 30 Borrar procedimientos, 9, 14 arcocoseno, 39 borrasecuencia, 61 arcoseno, 39 borratexto, 37 arcotangente, 39 borratodo, 9, 46 ´ Area de Dibujo, 7 borravariable, 46 87
  • 88. 88 ´ ´ INDICE ALFABETICO bos, 61 cos, 39 botonigu, 66 cosa, 46 bov, 46 Coseno, 39 bp, 27 coseno, 39 bt, 37 cron´metro, 69 o Bucles, 56 crono, 69 cs, 39 c´rculo, 28, 30 ı Cuadr´ ıcula, 15 cabeceabajo, 29 cuadr´cula, 24 ı cabecearriba, 29 cuadr´cula?, 43 ı cabeceo, 31 cuadricula, 15 Calidad del dibujo, 16 cuenta, 42 calidaddibujo, 27 cuentarepite, 56 cambiadirectorio, 48 cursiva, 38 cambiasigno, 39 cyan, 36 car, 63 caracter, 63 def, 45 carga, 48 define, 45 cargaimagen, 49 definel´nea, 32 ı cat, 48 definepol´gono, 31 ı cat´logo, 48 a definepunto, 32 cd, 48 definetexto, 32 cdib, 27 Definir archivos de inicio, 13 centro, 25, 30 defl´nea, 32 ı chattcp, 72 defpoli, 31 ci, 49 defpto, 32 cierraflujo, 49 deftxt, 32 cierto, 43 Desinstalar, 83 cl, 26 detieneanimaci´n, 36 o cociente, 39 detienecuadricula, 15 Color de l´piz predeterminado, 15 a detieneejes, 15 Color de papel predeterminado, 15 detienetodo, 53 colorcuadr´cula, 24 ı dev, 53 colorejes, 25 devuelve, 46, 53 Colores, 35 devuelvepropiedad, 47 Colores (ejemplo), 78 dibujaigu, 67 colorl´piz, 26 a diferencia, 22, 39 colorpapel, 27 dir, 48 colortexto, 37 directorio, 48 Comando de Inicio, 7 distancia, 25, 30 Comandos, 19 div, 39 Comentarios, 44 divisi´n, 22, 39 o Condicionales, 54 contador, 56 ec, 26 contenido, 46 ed, 7, 20 Convenciones, 19 Edici´n, 12 o Copiar, 7, 12 edita, 7 Copo de nieve, 76 Editar, 7 Cortar, 7, 12 editatodo, 7
  • 89. ´ ´ INDICE ALFABETICO 89 Editor de Procedimientos, 7 fl, 26 edtodo, 7 Foco, 34 Efectos de luz y niebla, 34 forma, 26 ejecuta, 46 Forma del l´piz, 16 a ejecutatcp, 72 formal´piz, 26 a ejes, 15, 25 fr, 41 Ejes cartesianos, 15 frase, 41 ejex, 15, 25 ftexto, 37 ejex?, 43 Fuente, 16 ejey, 15, 25 fuente, 28 ejey?, 43 fuentetexto, 37 Elegir color del l´piz, 13 a Funciones trigonom´tricas, 39 e Elegir color del papel, 13 elemento, 41 gd, 24, 29 elige, 41 Gesti´n de tiempos, 69 o eliminaigu, 67 gi, 24, 29 eliminatortuga, 60 giraderecha, 24, 29 empiezal´nea, 32 ı giraizquierda, 24, 29 empiezapol´gono, 31 ı gl, 26 empiezapunto, 32 go, 26 empiezatexto, 32 goma, 26 encuentracolor, 26 gris, 36 entero?, 43 grisclaro, 36 enviatcp, 72 grosorl´piz, 26 a es, 37 guarda, 48 escribe, 37 Guardar, 11 escribelineaflujo, 49 Guardar como ..., 11 escuchatcp, 72 Guardar en formato RTF, 12 Espacios, 21 Guardar imagen como. . . , 12 espera, 69 guardatodo, 48 esquinasventana, 27 estilo, 38 hacia, 25, 30 exp, 39 haz, 45 hazlocal, 45 Factorial, 46, 75 Hist´rico de Comandos, 7, 20 o falso, 43 hora, 69 fecha, 69 Figura de la tortuga, 14 Idioma, 14 fin, 20, 43 iguales?, 22, 43 fincron´metro?, 69 o ila, 26 fincrono?, 69 Imprimir imagen, 12 finflujo?, 49 imts, 46 finl´nea, 32 ı imvars, 46 finpol´gono, 31 ı indicesecuencia, 61 finpoli, 31 indsec, 61 finpto, 32 instr, 61 finpunto, 32 instrumento, 61 fintexto, 32 invierte, 41 fintxt, 32 inviertel´piz, 26 a
  • 90. 90 ´ ´ INDICE ALFABETICO .jpg, 12, 49 menuigu, 66 MIDI, 16, 61 L´ ınea de Comando, 7 miembro, 42 largoetiqueta, 27, 30 miembro?, 43 leecar, 63 mientras, 53, 56 leecarflujo, 49 modojaula, 27, 28 leelineaflujo, 48 modoventana, 27, 28 leelista, 63 modovuelta, 27, 28 leeprop, 47 mp, 41 leepropiedad, 47 msj, 28 leerat´n, 64 o mt, 26 leetecla, 63 mu, 41 leeteclado, 63 muestratortuga, 26, 60 .lgo, 13 multitortuga, 60 Licencia GPL, 17 limpia, 27 N´mero m´ximo de tortugas, 15 u a lista, 41 N´meros, 19 u lista?, 43 naranja, 36 Listado de primitivas, 24 negrita, 38 listaflujos, 48 negro, 35 listaprocs, 46 nft, 37 listaprop, 47 Niebla densa, 35 listapropiedades, 47 Niebla lineal, 35 Listas, 19, 41, 81 ninguno, 38 Listas de Propiedades, 47 no, 38 listasprop, 46 nombrefuentetexto, 37 listaspropiedades, 46 Nuevo, 11 listavars, 46 numero?, 43 ln, 39 o, 22, 38 local, 45 objeto, 46 log, 39 ocultatortuga, 26 log10, 39 Operadores aritm´ticos, 22 e Logaritmos, 39 Operadores l´gicos, 22, 38 o logneperiano, 39 Opuesto, 39 Luz Ambiental, 34 orientaci´n, 31 o Luz Direccional, 34 ot, 26 magenta, 36 palabra, 41 Marco de adorno, 15 palabra?, 43 marr´n, 36 o Palabras, 19 maximastortugas, 60 para, 20, 43 maxt, 60 paracada, 56 May´sculas y min´sculas, 22 u u pcc, 24 mecanograf´a, 37 ı pcd, 27 Medall´n, 82 o pce, 25 Memoria destinada a XLogo, 16 pctexto, 37 menos´ltimo, 41 u Pegar, 7, 13 menosprimero, 41 perspectiva, 28 mensaje, 28 pest, 38
  • 91. ´ ´ INDICE ALFABETICO 91 pf, 27 ponx, 25, 30 pfl, 26 ponxy, 25 pforma, 26 ponxyz, 30 pft, 37 pony, 25, 30 pi, 39 ponz, 31 pindsec, 61 Portapapeles, 12 pinstr, 61 pos, 25, 30 pla, 26 posici´n, 25, 30 o pmt, 60 posicionigu, 67 pnft, 37 posrat´n, 64 o .png, 12, 49 potencia, 39 pon´ltimo, 41 u pp, 41 ponbalanceo, 31 pr, 42 poncabeceo, 31 Preferencias, 14 poncalidaddibujo, 27 prim?, 43 poncl, 26 primero, 42 poncolorcuadr´cula, 24 ı primitiva?, 43 poncolorcuadricula, 15 Primitivas, 19 poncolorejes, 15, 25 Primitivas personalizadas, 13 poncolorl´piz, 26 a proc?, 43 poncolorlapiz, 13 procedimiento?, 43 poncolorpapel, 13, 26 Procedimientos, 20 poncolortexto, 37 producto, 22, 39 poncp, 26 Propiedades, 26 pondir, 48 ptortuga, 60 pondirectorio, 48 pu, 41 ponestilo, 38 punto, 25, 30 ponforma, 14, 26 Punto de Luz, 34 ponformal´piz, 26 a ponfuente, 27 quita, 41 ponfuentetexto, 37 pongrosor, 26 raizcuadrada, 39 ponindicesecuencia, 61 Rat´n, 64 o poninstrumento, 16, 61 rat´n?, 64 o ponl´piz, 26 a rc, 39 ponmaximastortugas, 60 re, 24, 29 ponnombrefuentetexto, 37 Recursividad, 59 ponorientaci´n, 31 o redondea, 39 ponpos, 25, 30 reemplaza, 42 ponposici´n, 25, 30 o refresca, 36 ponprimero, 41 refrescar, 36 ponprop, 47 rellena, 50 ponpropiedad, 47 rellenazona, 50 ponr, 25 repite, 53, 56 ponrumbo, 25, 30 repitepara, 56 ponsep, 38 repitesiempre, 56 ponseparaci´n, 38 o Resaltado, 17 pontama~opantalla, 27 n resto, 39 pontortuga, 60 retrocede, 24, 29
  • 92. 92 ´ ´ INDICE ALFABETICO rojo, 35 Traducir XLogo, 17 rojooscuro, 36 trazado, 46 rosa, 36 Tres Dimensiones, 28 rotula, 27, 30 truncar, 39 RTF, 12 trunca, 39 rumbo, 25, 30 tv, 27 Ruptura de secuencia, 53 ´ltimo, 42 u Salir, 10, 12 unicode, 63 Saltos de l´ınea, 21 vac´o?, 43 ı sec, 61 Valor absoluto, 39 secuencia, 61 var?, 43 Seleccionar todo, 13 variable?, 43 sen, 39 Variables, 21, 44 Seno, 39 Variables globales, 45 seno, 39 Variables locales, 45 separaci´n, 38 o Variables opcionales, 45 si, 54 Velocidad de la tortuga, 14 Sintaxis, 22 Ventana de Editor, 20 sisino, 54 verde, 35 sl, 26 verdeoscuro, 36 sn, 29 violeta, 36 Sonido, 16 visible?, 43 sub´ndice, 38 ı vista3d, 32 subel´piz, 26 a vistapol´gono, 32 ı subenariz, 29 subrayado, 38 y, 22, 38 suma, 22, 39 super´ndice, 38 ı Zoom, 7 zoom, 27 tachado, 38 Tama˜o de la ventana, 16 n Tama˜o m´ximo del l´piz, 15 n a a tama~opantalla, 27 n tama~oventana, 27 n tan, 39 Tangente, 39 tangente, 39 tecla?, 63 Teclado, 63 tiempo, 69 tipea, 37 tocam´sica, 61 u Tocar m´sica, 61 u tortuga, 60 tortugas, 60 tpant, 27 Traducci´n de la Licencia, 17 o Traducir procedimientos, 13