|  |  | Algunos Ejemplos |

### Algunos Ejemplos

(N.del T. En lo que sigue se usarán las palabras "referencia" y "nombre". "referencia" es una variable que apunta a un objeto. "nombre" es el rótulo que aparece en la figura. A veces se usará el termino variable; pero "referencia" es más preciso en otros casos.)

En sí, Scheme es un lenguaje de muy alto nivel. Cuando una figura es definida en este lenguaje, disponemos también de todo su poder para, por ejemplo, definir recursivamente alguna parte de la figura o bien para colocar aleatoriamente ciertos objetos de tal suerte que, cada vez que se cargue la figura, los objetos aparecerán ligeramente distintos. En pocas palabras, los FSD no están atados a las limitantes de la interfaz gráfica, y además poseen todo el poder del lenguaje Scheme. Un FSD es entonces un archivo con extensión .scm creado con la ayuda de un editor de texto, el cual es abierto en DR. GEO con la ayuda del comando `Archivo->Evaluar`.

Comencemos por estudiar un ejemplo sencillo de FSD :

    (nueva-figura "Mi figura")

Este es el script más pequeño que podemos definir. Después de ser cargado en DR. GEO, simplemente crea una nueva figura vacía con el nombre "Mi figura". Podemos escribir comandos `(nueva-figura "Mi figura")` tantas veces como deseemos.

Veamos ahora un segundo ejemplo :

    (nueva-figura "Mi figura")
    (sea Punto "A" libre 1.2 -2)

Este FSD define una figura con un punto libre A de coordenadas iniciales (1,2 ; -2). Como podemos ver la sintaxis de la definición de un objeto geométrico es relativamente cómoda, a tal grado que esa expresada en nuestra lengua madre. Esto es de interés especial para la enseñanza secundaria. De hecho, todos los comandos de definición de objeto tienen una sintaxis común. Tal sintaxis es como sigue:

1. Se comienza siempre con la palabra clave `sea`, la cual indica que deseamos definir un nuevo objeto
2. Inmediatamente le sigue la clase de objeto; en este caso `Punto`.
3. El nombre del objeto va enseguida, A, debe siempre estar entre dos comillas ". Si no deseamos nombrar al objeto, de todos modos es necesario dar un nombre vacío como sigue: "".
4. Para terminar, necesitamos precisar, dentro de la clase, qué tipo de objeto, en nuestro ejemplo, la clase es punto, y el tipo es `libre`. Esto significa que el punto A es libre.
5. El tipo de objeto es seguido por una lista de argumentos que depende de la clase de objeto y del tipo de objeto. En nuestro ejemplo, esta lista se compone de dos números: las coordenadas del punto libre A.

Prosigamos con un tercer ejemplo :

    (define (triángulo p1 p2 p3)
      (Segmento "" extremos p1 p2)
      (Segmento "" extremos p2 p3)
      (Segmento "" extremos p1 p3))

    (define (azar)
      (- 8 (* 16 (random:uniform))))

    (nueva-figura "Mi figura")

    (sea Punto "A" libre (azar) 0)
    (sea Punto "B" libre 5 0)
    (sea Punto "C" libre (azar) 5)

    (triángulo A B C)

(N. del T. En este ejemplo, dos palabras están en inglés: "random" que significa "azar", y "uniform" que significa "uniforme". Como se comentó antes es posible traducirlas modificando el archivo dentro del directorio scm donde DR. GEO esté instalado. El archivo para español es: `/usr/share/drgeo/scm/drgeo_scm_interface_constant_es.scm`).

Este ejemplo es particularmente interesante, nos muestra tres cosas importantes :

1. La definición de una construcción de alto nivel no prevista por los autores de DR. GEO. En el programa que acabamos de ver hemos definido la función `triángulo` la cual, a partir de tres puntos construye el triángulo que pasa por esos tres puntos. Podemos comparar esto con las macros; pero con un grado de libertad mucho más amplio e importante.
2. La definición de las funciones asociadas, en este caso definimos la función `azar` que devuelve un número decimal comprendido entre -8 y 8. Utilizamos esta función para añadir un elemento de azar en ciertos puntos en nuestra figura. De este modo cada vez que se cargue la figura, ésta será ligeramente distinta.
3. En efecto, la utilización de la palabra clave `sea` no es obligatoria; nosotros la utilizamos para guardar una referencia al objeto creado. Por ejemplo, dentro de la función `triángulo` no guardamos referencias para los segmentos creados. Por otro lado, cuando definimos los puntos A, B y C necesitamos guardar una referencia para ellos, estas referencias se llamarán igual10; pero sin las comillas; así nuestras referencias son: `A`, `B` y `C`. En lo que sigue llamaremos símbolos a esas variables, ésta es la terminología precisa del lenguaje Scheme. De este modo, al llamar a la función `triángulo`, pasamos como parámetros a los símbolos `A`, `B` y `C` que son utilizados para definir nuestros tres segmentos.

Notar que cuando definimos los segmentos, no les dimos ningún nombre; en ese caso DR. GEO les dará un nombre que está determinado a partir del nombre de sus extremos. Nuestros tres segmentos tendrán entonces los nombres [AB], [BC] y [AC].

Para concluir esta sección, veamos un último ejemplo :

    (sea Punto "A" libre 1 0)
    (sea Punto "B" libre 5 0)
    (sea Recta "d1" 2puntos A B)

    (envía A color amarillo)
    (envía A forma redonda)
    (envía A tamaño grande)
    (envía B oculto)
    (envía d1 grosor punteado)

Los tres primeros comandos crean dos puntos y una recta. La parte que nos interesa particularmente es la serie de comandos `envía`. Estos comandos permiten la comunicación con un objeto cuyo símbolo hemos guardado; en este caso tenemos los símbolos `A`, `B` y `d1`. El comando consiste en enviar un mensaje a un objeto. Su primer parámetro de entrada es el objeto con el que deseamos comunicarnos, el segundo argumento es el mensaje, los restantes argumentos están determinados por tipo de mensaje que es enviado. Por ejemplo `(envía A color amarillo)` envía el mensaje `color` con parámetro de entrada `amarillo`. El punto A toma entonces el color amarillo. Es fácil comprender el sentido de los otros comandos `envía`. Estos serán explicados en la sección siguiente.

Hemos terminado nuestra pequeña visita guiada a las Figuras Scheme de Dr. Geo, FSD. En las secciones siguientes expondremos el conjunto de comandos disponibles para definir las FSD.

|  |  | Algunos Ejemplos |