|  |  | Alcuni esempi |

## Alcuni esempi

Scheme è per sua natura un linguaggio di alto livello, per questa ragione, una volta definita una figura, avremo a disposizione tutta la sua potenza per eseguire, ad esempio, azioni ricorsive su parti della figura o per utilizzare funzioni aleatorie per modificarla ad ogni sua comparsa sul foglio di lavoro. In altri termini le FSD sono allo stesso tempo svincolate dall'interfaccia grafica e potenziate dalla presenza di Scheme.

Una FSD è un file con estensione .scm creato attraverso un editore di testo che, una volta aperto in DR. GEO attraverso il comando `File->Valuta`, genera una figura sul foglio di lavoro.

Iniziamo studiando un semplice esempio di FSD:

    (new-figure "Figura")

Si tratta della più semplice FSD che si possa definire. Una volta valutato il file in DR. GEO appare una nuova figura vuota con nome "Figura". Ripetendo il comando `(new-figure "Figura")` verranno create quante figure si desiderano.

Vediamo un secondo esempio:

    (new-figure "Figura")
    (lets Point "A" free 1.2 -2)

Questa FSD definisce una figura con un punto libero A di coordinate (1,2 ; -2). Come si può vedere la sintassi utile per la definizione dell'oggetto geometrico è intuitiva e espressa in un linguaggio molto vicino a quello comune. Osserviamo inoltre come questa definizione sia sostanzialmente identica nella forma a quella di tutti i comandi che permettono di definire i rimanenti oggetti:

1. inizia con la parola chiave `lets` che indica che si desidera costruire un nuovo oggetto;
2. segue la categoria a cui appartiene l'oggetto, in questo caso `Point`.
3. quindi si scrive il nome dell'oggetto, nel nostro caso A, sempre tra virgolette ". Se non si desidera dare alcun nome all'oggetto è sufficiente scrivere:

       ""

4. infine si precisa il tipo di oggetto, ossia il tipo di punto, che nel nostro caso è libero `free`;
5. il tipo di oggetto è seguito da una lista di argomenti specifici che, nel nostro esempio, coincide con la coppia di coordinate che definiscono il punto A.

Vediamo un terzo esempio:

    (define (triangolo p1 p2 p3)
      (Segment "" extremities p1 p2)
      (Segment "" extremities p2 p3)
      (Segment "" extremities p1 p3))

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

    (new-figure "Figura")

    (lets Point "A" free (casuale) 0)
    (lets Point "B" free 5 0)
    (lets Point "C" free (casuale) 5)

    (triangolo A B C)

Questo esempio è di particolare interesse in quanto ci mostra tre aspetti essenziali:

1. come introdurre costruzioni di più alto livello non previste inizialmente in DR. GEO. Qui abbiamo definito la funzione `triangolo` che a partire da tre punti qualsiasi costruisce un triangolo. Possiamo confrontare questa costruzione con quella che potremmo definire attraverso una macro concludendo che il primo metodo è più potente;
2. come definire funzioni associate: nel nostro caso la funzione `casuale` che ritorna un numero decimale casuale compreso tra -8 e 8. Attraverso questa funzione, ogni volta che viene aperta la figura, il disegno apparirà diverso;
3. l'uso della parola chiave `lets` non è obbligatorio, ma legato alla necessità di definire o meno dei riferimenti per l'oggetto creato. Ad esempio nella funzione `triangolo` non abbiamo bisogno di alcun riferimento ai segmenti creati; al contrario quando definiamo i punti A, B e C sono necessari dei riferimenti. In questo caso i riferimenti hanno lo stesso nome5 senza virgolette: `A`, `B` e `C`. Nel seguito chiameremo questi riferimenti simboli; ciò per utilizzare in modo corretto la terminologia del linguaggio Scheme. In questo modo quando la funzione `triangolo` viene chiamata vengono passati ad essa come parametri i simboli `A`, `B` e `C`, che vengono utilizzati per definire i vertici del triangolo.

Osserviamo che quando si definiscono i segmenti non vengono assegnati ad essi dei nomi in quanto DR. GEO fa questo automaticamente: nel nostro caso i segmenti saranno [AB], [BC] e [AC].

Per concludere questa sezione vediamo un ultimo esempio:

    (lets Point "A" free 1 0)
    (lets Point "B" free 5 0)
    (lets Line "d1" 2points A B)

    (send A color yellow)
    (send A shape round)
    (send A size large)
    (send B masked)
    (send d1 thickness dashed)

I primi tre comandi permettono di costruire due punti e una retta. La parte che qui maggiormente interessa riguarda la serie di comandi preceduti da `send`. Questo comando permette di comunicare con un oggetto di cui si dispone del simbolo relativo. In questo caso i simboli di cui disponiamo sono `A`, `B` e `d1`. La struttura di `send` consiste in primo luogo di un primo argomento che identifica l'oggetto con cui si vuole comunicare e di un secondo argomento che definisce il messaggio. Dal terzo argomento in poi seguono informazioni legate alla natura del messaggio. Ad esempio `(send A color yellow)` invia il messagio `color` con parametro `yellow`: in questo caso il punto viene dipinto di giallo. Il significato dei rimanenti comandi dovrebbe a questo punto risultare ovvio. In ogni caso ritorneremo su essi nel seguito.

Terminata questa breve visita guidata alle Figure Scheme per Dr. Geo nella sezione seguente verranno esposti i comandi disponibili per definire le diverse FSD.

|  |  | Alcuni esempi |