|  |  | Quelques exemples |

### Quelques exemples

En lui-même Scheme est un langage de très haut niveau, lorsqu'une figure est définie dans ce langage, nous disposons également de toute sa puissance pour par exemple définir récursivement telle partie de la figure, ou bien pour placer aléatoirement certains objets de telle sorte qu'à chaque ouverture de la figure, celle-ci est légèrement différente. Bref, les FSD sont libérées du carcan de l'interface graphique tout en étant renforcées du langage Scheme. Une FSD est donc un fichier d'extension .scm créé à l'aide d'un éditeur de texte, il est ensuite ouvert dans DR. GEO à l'aide de la commande `Fichier->Évaluer`.

Commençons par étudier un exemple simple de FSD :

    (nouvelle-figure "Ma figure")

C'est la plus petite FSD que nous puissions définir. Lors de son chargement dans DR. GEO, celle-ci va simplement créer une nouvelle figure vide nommée "Ma figure". Nous pourrions multiplier les commandes `(nouvelle-figure "Ma figure")` autant de fois que nous le souhaitons, autant de figures seraient créées.

Abordons un deuxième exemple :

    (nouvelle-figure "Ma figure")
    (soit Point "A" libre 1.2 -2)

Cette FSD définit une figure avec un point libre A de coordonnées initiales (1,2 ; -2). Comme nous pouvons le voir la syntaxe de définition d'un objet géométrique est relativement agréable, d'autant plus qu'elle est exprimée dans une langue naturelle. Intéressons-nous de plus près à la deuxième instruction, en effet celle-ci suit une syntaxe qui est commune à toutes les commandes de définition d'objet. Ce type de commande se décompose comme suit :

1. Elle commence toujours par le mot-clé `soit`, il indique que nous souhaitons définir un nouvel objet.
2. Il est immédiatement suivi de la catégorie de l'objet, ici `Point`.
3. Le nom de l'objet vient ensuite, A, il doit toujours être entouré de ". Si nous ne souhaitons pas nommer l'objet, il faut tout de même donner un nom vide comme suit: "".
4. Enfin, nous précisons le type de l'objet - le type de point dans notre exemple - ici `libre`. Cela signifie que le point A est libre.
5. Le type de l'objet est suivi d'une liste d'arguments spécifiques. Dans notre exemple cette liste est composée de deux nombres, les coordonnées du point libre A.

Poursuivons avec un troisième exemple :

    (define (triangle p1 p2 p3)
      (Segment "" extrémités p1 p2)
      (Segment "" extrémités p2 p3)
      (Segment "" extrémités p1 p3))

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

    (nouvelle-figure "Ma figure")

    (soit Point "A" libre (hasard) 0)
    (soit Point "B" libre 5 0)
    (soit Point "C" libre (hasard) 5)

    (triangle A B C)

Cet exemple est particulièrement intéressant, il nous montre trois choses importantes :

1. L'introduction de construction de plus haut niveau, non prévue au départ par DR. GEO. Ici nous avons défini la fonction `triangle` qui, à partir de trois points, construit le triangle passant par ces trois points. Nous pouvons comparer ceci avec les macro-constructions mais avec un degré de liberté beaucoup plus important.
2. La définition de fonctions associées, ici nous avons défini la fonction `hasard` qui retourne un nombre décimal compris entre -8 et 8. Nous utilisons cette fonction pour placer au hasard certains points de notre figure, ainsi à chaque ouverture la figure est légèrement différente.
3. En fait l'utilisation du mot clé `soit` n'est pas obligatoire, nous l'utilisons lorsque nous souhaitons garder une référence de l'objet créé. Par exemple dans la fonction `triangle`, nous ne gardons pas de références des segments créés, en revanche lorsque nous définissons nos points A, B et C nous avons besoin de garder une référence, ces références ont le même nom9 sans guillemet : `A`, `B` et `C`. Dans la suite nous appellerons symbole ces références, c'est la terminologie exacte du langage Scheme. Ainsi, lors de l'appel de la fonction `triangle`, nous passons en paramètre les symboles `A`, `B` et `C` qui sont utilisés pour définir nos trois segments.

Noter que lors de la définition des segments, nous ne donnons pas de nom, dans ce cas DR. GEO va attribuer un nom par défaut défini à partir du nom des extrémités. Nos trois segments auront donc comme nom [AB], [BC] et [AC].

Pour clore cette section, voici un dernier exemple :

    (soit Point "A" libre 1 0)
    (soit Point "B" libre 5 0)
    (soit Droite "d1" 2points A B)

    (envoi A couleur jaune)
    (envoi A forme rond)
    (envoi A taille large)
    (envoi B masquer)
    (envoi d1 épaisseur tiret)

Les trois premières commandes créent deux points et une droite. La partie qui nous intéresse plus particulièrement est la commande `envoi`. Cette commande permet de communiquer avec un objet dont nous avons gardé un symbole, ici nous avons les symboles `A`, `B` et `d1`. Elle consiste à envoyer un message à un objet, son premier argument est l'objet avec lequel nous communiquons, le deuxième argument le message, le troisième et les suivants sont déterminés par la nature du message. Par exemple `(envoi A couleur jaune)` envoie le message `couleur` avec comme paramètre `jaune`, le point A est peint en jaune. Il est assez facile de comprendre le sens des autres commandes `envoi`. Elles seront expliquées dans la section suivante.

Nous avons terminé notre petite visite guidée des Figure Scheme Dr. Geo. Dans les sections suivantes nous exposons l'ensemble des commandes disponibles pour définir des FSD.

|  |  | Quelques exemples |