Appendice A
Elenco delle primitive

La tartaruga è comandata tramite comandi interni chiamati ‘primitive’. Le seguenti sezioni descrivono le primitive di XLOGO.

A.1 Movimento della tartaruga, impostazioni del tratto e del colore

A.1.1 Movimento

Queste prime primitive governano il movimento della tartaruga.

Avanti, Av n


Sposta la tartaruga in avanti di n passi, nella direzione in cui si trova.

Indietro, In n


Sposta la tartaruga indietro di n passi, nella direzione in cui si trova.

RuotaDestra, DX n


Ruota la tartaruga di n gradi verso la sua destra (rispetto la direzione in cui si trova).

RuotaSinistra, SX n


Ruota la tartaruga di n gradi verso la sua sinistra (rispetto la direzione in cui si trova).

Cerchio, Circonferenza R


Disegna una circonferenza di raggio R avente come centro la tartaruga.

Arco R ang1 ang2


Disegna una arco di circonferenza di raggio R attorno alla tartaruga. L’arco è viene tracciato dall’angolo ang1 all’angolo ang2.

Origine


Riporta la tartaruga alla sua posizione iniziale ossia alle coordinate [0 0] con direzione 0 gradi.

ImpostaPosizione, ImpPos elenco


Sposta la tartaruga alle coordinate x e y specificate nell’elenco (x si riferisce all’asse delle x, y all’asse delle y).
Esempio: ImpPos [50 30]

ImpostaX, ImpX x


Sposta la tartaruga orizzontalmente fino al punto x sull’asse delle ascisse (X).

ImpostaY, ImpY y


Sposta la tartaruga verticalmente fino al punto y sull’asse delle ordinate (Y).

ImpostaXY, ImpXY x y


Identico a ImpPos [x y]

ImpostaDirezione, ImpDir n


Orienta la tartaruga nelle direzione n (0-360 gradi), dove 0 corrisponde alla direzione verticale verso l’alto (Nord), 90 alla direzione orizzontale verso destra (Est) e così via in base all’orientamento della bussola.

Etichetta arg


Disegna arg a partire dalla posizione della tartaruga, ruotato di 90 gradi verso destra. arg può essere una parola od un elenco.
Esempio: Etichetta [Ciao lì fuori!] scriverà la frase “”Ciao lì fuori!” ovunque la tartaruga sia, in direzione orizzontale.
Esempio: SX 90 Etichetta [Ciao lì fuori!] scriverà la frase “Ciao lì fuori! ovunque la tartaruga sia, in direzione verticale verso l’alto.

Punto elenco


Illumina nel colore della penna il punto identificato dalle coordinate nell’elenco.
Esempio: Punto [100 50] Illumina il punto di coordinate x 100 e y 50.

A.1.2 Proprietà della tartaruga

In questo secondo gruppo rientrano le primitive che impostano le proprietà della tartaruga. Per esempio la tartaruga è visibile sullo schermo? Di che colore dovrebbe essere il tratto quando si sposta?

MostraTartaruga, MT


Rende visibile la tartaruga sullo schermo.

NascondiTartaruga, NT


Rende la tartaruga invisibile sullo schermo.

PulisciSchermo, PSc


Svuota l’area di disegno.

Pulisci


Svuota l’area di disegno ma lascia la tartaruga nello stesso posto.

ResettaTutto, InizializzaTutto


Riporta l’interfaccia di XLOGO ai valori iniziali e svuota l’area di disegno. I valori iniziali sono:

PennaGiu, PennaGiu, PG


Quando la penna è abbassata la tartaruga traccia il percorso che compie mentre si sposta.

PennaSu, PennaSu, PS


Quando la penna è alzata la tartaruga si sposta senza tracciare il proprio percorso.

CancellaPenna, CP


La tartaruga cancella qualsiasi segno incontro al proprio passaggio.

InvertiPenna, InvPenna


Abbassa la penna e pone la tartaruga in modalità inversa.

PennaDisegno, PD


Abbassa la penna e pone la tartaruga nella modalità classica di disegno.

ImpostaColorePenna, ImpCP colore


Imposta il colore della penna, cfr. pagina § per l’elenco dei colori.

ImpostaColoreSfondo, ImpCS colore


Imposta il colore dello sfondo, cfr. pagina § per l’elenco dei colori.

Posizione, Pos


Restituisce la posizione attuale della tartaruga.
Esempio: Pos ritorna [10 -100]

x


Restituisce la coordinata X della posizione della tartaruga.

y


Restituisce la coordinata Y della posizione della tartaruga.

z


Restituisce la coordinata Z della posizione della tartaruga (Disponibile solamente nella modalità 3D).

Direzione


Restituisce la direzione in gradi della tartaruga (cfr. ImpostaDirezione)

Verso elenco


Restituisce la direzione verso cui la tartaruga dovrebbe puntare per raggiungere il punto definito dalle coordinate definite in elenco. Elenco deve contenere due numeri che rappresentino le coordinate x e y del punto.

Distanza elenco


Restituisce il numero di passi che la tartaruga dovrebbe compiere per raggiungere il punto definito dalle coordinate definite in elenco. Elenco deve contenere due numeri che rappresentino le coordinate x e y del punto.

ColorePenna, ColP


Restituisce il colore della penna attuale. Il colore è definito come un elenco di tre numeri [r g b] dove r è la componente rossa, b è la componente blu, g è la componente verde.

ColoreSfondo, ColS


Restituisce il colore dello sfondo attuale. Il colore è definito come un elenco di tre numeri [r g b] dove r è la componente rossa, b è la componente blu, g è la componente verde.

Finestra


Si permette alla tartaruga di muoversi fuori dalla area di disegno (senza disegnarci, ovviamente).

Gira


Si permette alla tartaruga di lasciare l’area di disegno e riapparire dal lato opposto!

Recinta


Non si permette alla tartaruga di lasciare l’area di disegno. Nel momento in cui sta per uscirne comparirà un messaggio di errore che informerà del numero massimo di passi che la tartaruga può compiere prima di raggiungere il punto di uscita.

Prospettiva, 3D


La tartaruga può spostarsi in uno spazio a 3 dimensioni (cfr. la sezione speciale A.14 per questa modalità). Per tornare alla modalità classica 2D, utilizzare una delle 3 primitive Finestra, Gira or Recinta

CercaColore, CC elenco


Restituisce il colore del punto nell’area di disegno identificato dalle coordinate x e y fornite in elenco elenco. Il colore è definito come un elenco di tre numeri [r g b] dove r è la componente rossa, b è la componente blu, g è la componente verde.

ImpSpessorePenna, ImpSP n


Imposta lo spessore della penna della tartaruga in pixel (o passi). Lo spessore iniziale è 1. La penna ha una forma quadrata o rotonda (altre forme saranno introdotte in versioni future di XLOGO).

SpessorePenna, SP


Restituisce lo spessore nella penna della tartaruga in punti (o passi).

ImpFormaPenna, ImpFP 0-1


Imposta la forma della penna, quadrata o rotonda:

FormaPenna, FP


Restituisce la forma della penna.

ImpQualitaDisegno, ImpQD 0-1-2


Imposta la qualità del disegno :

QualitaDisegno, QD


Restituisce la qualità del disegno.

ImpDimensioneSchermo elenco


Imposta la dimensione dell’area di disegno ai valori x e y definiti in elenco. ImpDimensioneSchermo [1000 1000]

DimensioneSchermo


Restituisce un elenco di due numeri con la dimensioni dell’area di disegno.

ImpostaForma, ImpFo n


Si può scegliere la forma della tartaruga nel secondo tab della finestra aperta da Opzioni-Preferenze... Ma si può impostare la tartaruga preferita con ImpostaForma. Il numero n varia da 0 a 6 (0 rappresenta la forma triangolare).

Forma


Restituisce il numero che rappresenta la forma della tartaruga.

ImpostaCorpoFont, ImpCFont n


Quando si scrive nell’area di disegno con la primitiva Etichetta, si può modificare il corpo (ossia le dimensioni) del font iniziale che è 12.

CorpoFont


Restituisce il corpo (le dimensioni) del font impostato per quando si scrive nell’area di disegno con la primitiva Etichetta.

ImpostaNomeFont, ImpNFont n


Imposta il numero n del font quando si scrive nell’area di disegno con la primitiva Etichetta. L’elenco dei font ed i relativi numeri n da utilizzare si trova nel Tab Font del menu StrumentiPreferenze.

ImpostaAllineamentoTesto, ImpAllTesto elenco


Imposta l’allineamento attorno alla tartaruga da utilizzare quando si scrive nell’area di disegno con la primitiva Etichetta. elenco contiene due numeri interi.

Tutti i possibili casi che si possono verificare sono di seguito elencati. ImpCFont 50 Etichetta XLogo




PIC PIC PIC
ImpAllTesto [2 0] ImpAllTesto [1 0] ImpAllTesto [0 0]



PIC PIC PIC
ImpAllTesto [2 1] ImpAllTesto [1 1] ImpAllTesto [0 1]



PIC PIC PIC
ImpAllTesto [2 2] ImpAllTesto [1 2] ImpAllTesto [0 2]




AllineamentoTesto


Restituisce un elenco di due elementi che rappresenta l’allineamento del testo attorno alla tartaruga, quando si utilizza Etichetta per scrivere nell’area di disegno.

NomeFont, NF


Restituisce un elenco di due elementi. Il primo è il numero corrispondente al font utilizzato da Etichetta. Il secondo elemento è un elenco che contiene il nome del font.

ImpostaSeparazione,ImpSep n


Determina il rapporto tra l’area di disegno e l’area dello storico dei comandi. Il numero n deve essere incluso tra 0 e 1. Quando n è uguale a 1 l’intera area è occupata dall’area di disegno, quando n è uguale a 0 l’area con lo storico dei comandi usa tutto lo spazio.

Separazione,Sep


Restituisce il rapporto attuale tra l’area di disegno e l’area con lo storico dei comandi.

Griglia a b


Disegna una griglia, con ciascun rettangolo avente dimensioni a e b.

CancellaGriglia,CancGriglia


Elimina la griglia eventualmente disegnata.

ImpostaColoreGriglia,ImpColGriglia colore


Permette di impostare il colore desiderato per la griglia. Il colore è definito come un elenco di tre numeri [r g b] dove r è la componente rossa, b è la componente blu, g è la componente verde.

ColoreGriglia


Restituisce il colore della griglia attuale.

Griglia?


Restituisce vero se la griglia è disegnata, altrimenti restituisce falso.

Assi n


Disegna gli assi orizzontale e verticale. La distanza tra due divisioni è n passi.

AsseX n


Disegna l’asse orizzontale. La distanza tra due divisioni è n passi.

AsseY n


Disegna l’asse verticale. La distanza tra due divisioni è n passi.

CancellaAssi,CancAssi


Cancella entrambi gli assi.

ImpostaColoreAssi, ImpColAssi colore


Imposta il colore con cui disegnare gli assi. Il colore è definito come un elenco di tre numeri [r g b] dove r è la componente rossa, b è la componente blu, g è la componente verde.

ColoreAssi


Restituisce il colore attuale degli assi.

AsseX?


Restituisce vero se l’asse orizzontale è disegnato, altrimenti restituisce falso.

AsseY?


Restituisce vero se l’asse verticale è disegnato, altrimenti restituisce falso.

ImpostaZoom,ImpZoom a


Ingrandisce l’area di disegno di un fattore a che rappresenta la scala rispetto alle dimensioni originali dell’immagine definite nel pannello delle preferenze.

Zoom


Restituisce l’attuale scala di zoom.

LunghezzaEtichetta,LE arg


Restituisce la lunghezza del testo da scrivere nell’area di disegno con la primitiva Etichetta, utilizzando il font attuale.

DimensioneZona


Retituisce un elenco che contiene quattro numeri interi. L’elenco rappresenta le coordinate dell’angolo sinistro in alto e le coordinate dell’angolo destro in basso.

Messaggio, msg elenco


Visualizza una finestra di dialogo con il messaggio in elenco. L’esecuzione del programma viene fermata fino a ché l’utente clicca il bottone “OK”.

A.1.3 Qualche parola sui colori

I colori sono definiti in XLOGO come un elenco di tre numeri [r g b], ciascuno compreso tra 0 e 255, dove r è la componente rossa, b è la componente blu, g è la componente verde. XLOGO ha 16 colori predefiniti i quali possono essere richiamati con il loro elenco rgb o con una primitiva:

Numeri Primitive [R G B] Color
0 Nero [0 0 0]

PIC

1 Rosso [255 0 0]

PIC

2 Verde [0 255 0]

PIC

3 Giallo [255 255 0]

PIC

4 Blu [0 0 255]

PIC

5 Magenta [255 0 255]

PIC

6 Ciano [0 255 255]

PIC

7 Bianco [255 255 255]

PIC

8 Grigio [128 128 128]

PIC

9 GrigioChiaro [192 192 192]

PIC

10 RossoScuro [128 0 0]

PIC

11 GrigioScuro [0 128 0]

PIC

12 BluScuro [0 0 128]

PIC

13 Arancio [255 200 0]

PIC

14 Rosa [255 175 175]

PIC

15 Violetto [128 0 255]

PIC

16 Marrone [153 102 0]

PIC


Codice A.1: Tre istruzioni identiche per impostare il colore dello schermo
ImpCS Arancio 
ImpCS 13 
ImpCS [255 200 0]

A.1.4 Modalità Animazione

Le seguenti sono tre primitive che consentono l’esecuzione dei comandi in modo più veloce del solito. La tartaruga non si muoverà più fino a che non le viene imposto di ridisegnare lo schermo mediante la primitiva Aggiorna. Il vantaggio della modalità Animazione consiste nella maggiore velocità di disegno che consente di creare animazioni.

Animazione


La tartaruga entra nella modalità Animazione. Da questo momento non verrà disegnato niente sullo schermo se non quando si utilizza la primitiva Aggiorna.

FermaAnimazione


La tartaruga esce dalla modalità Animazione.

Aggiorna,Ridisegna


In modalità Animazione aggiorna l’area di disegno per riflettere tutte le primitive eseguite dal momento dell’ingresso nella modalità.

Per identificare la modalità Animazione, una icona con una telecamera appare nella finestra dello storico dei comandi. Se l’icona viene cliccata si esce dalla modalità.

PIC

A.1.5 Scrivere nell’area di testo con le primitive Stampa e Scrivi

La seguente tabella espone le primitive che permettono di modificare le proprietà dell’area di testo. Le primitive che controllano il colore e le dimensioni dell’area dello storico dei comandi influenzano solo le primitive Stampa o Scrivi

PulisciTesto, PT


Svuota l’area dello storico dei comandi.

Stampa, St arg


Scrive l’argomento arg nell’area dello storico dei comandi.
Codice A.2: La primitiva Stampa
Stampa "abcd # abcd 
St [1 2 3 4] #1 2 3 4 
St 4 # 4

Scrivi arg1


Come la primitiva Stampa scrive arg1 nell’area dello storico dei comandi ma senza andare a capo.

ImpostaDTesto, ImpDT n


Imposta il corpo del font nell’area dello storico dei comandi. Disponibile solo per la primitiva Stampa

DimensioneTesto, DT


Restituisce il corpo del font per la primitiva Stampa.

ImpostaColoreTesto, ImpCT colore


Imposta il colore del font nell’area dello storico dei comandi. Disponibile solo per la primitiva . Confronta pag. §.

ColoreTest, CT


Restituisce il colore del font nell’area dello storico dei comandi.

ImpostaNomeTesto, ImpNTesto n


Seleziona il font numero n per la scrittura con la primitiva Stampa nell’area dello storico dei comandi. Il collegamento tra il font ed il suo numero si può trovare nel MenuStrumentiPreferenzeTab Font.

NomeTesto, NT


Restituisce il font utilizzato nell’area dello storico dei comandi sotto forma di lista. Il primo elemento della lista corrisponde al numero del font utilizzato, il secondo elemento è una lista che riporta il nome del font stesso.

ImpostaStile, ImpSt arg


Imposta il formato del testo nell’area dello storico dei comandi. Si può scegliere tra Nessuno, Grassetto, Corsivo, Barrato, Sottolineato, Apice, Pedice. Per impostare più stili contemporaneamente raggrupparli in un elenco.
Alcuni esempi:

ImpostaStile [Grassetto Sottolineato] Stampa "Ciao
Ciao
ImpSt "Barrato Scrivi [Barrato] ImpSt "Corsivo Scrivi "\x ImpSt "Apice Stampa 2
Barrato x2

Stile, st


Restituisce un elenco contenente i diversi stili utilizzati per la primitiva Stampa.

A.2 Operazioni matematiche

Somma x y


Addiziona i due numeri x e y e ne restituisce il risultato.
Esempio: Somma  40 60 restituisce 100

Differenza x y


Restituisce x - y.
Esempio: Differenza  100 20 restituisce 80

Meno x


Restituisce il negativo di x.
Esempio: Meno  5 restituisce -5. Leggere la nota alla fine del paragrafo.

Prodotto x y


Restituisce il risultato della moltiplicazione di x per y.

Div, Dividi x y


Restituisce il risultato della divisione di x per y
Esempio: Div  3 6 restituisce 0.5

Quoziente x y


Restituisce il quoziente della divisione di x per y
Quoziente  15 6 restituisce 2

Resto x y


Restituisce il resto della divisione di x per y.

mod, modulo x y


Restituisce x modulo y. La seguente tabella dimostra la differenza tra modulo x y e Resto x y.





x
y
Resto x y
modulo x y




14
5
4
4




-14
5
-4
1




14
-5
4
-1




-14
-5
-4
-4




Arrotonda x


Restituisce il più vicino numero intero a x.



Istruzione
Risultato


Arrotonda 8.9
9


Arrotonda 6.8
7


Arrotonda 6.2
6


Intero, Int x


Restituisce la parte intera del numero x.



Istruzione
Risultato


Intero 8.9
8


Intero 6.8
6


Intero 6.2
6


Potenza x n


Restituisce x elevato alla potenza di n.
Esempio: Potenza  3 2 restituisce 9

RadiceQuadrata, RadQ x


Restituisce la radice quadrata di x.

Log x


Restituisce il logaritmo naturale (a base e) di x.

Exp x


Restituisce il valore della base del logaritmo naturale (e), elevato alla potenza dell’esponente x.

Log10 x


Restituisce il logaritmo a base 10 di x.

Seno, sen x


Restituisce il seno di x (x è espresso in gradi sessagesimali).

Coseno, cos x


Restituisce il coseno di x (x è espresso in gradi sessagesimali).

Tangente, tan x


Restituisce la tangente di x (x è espresso in gradi sessagesimali).

ArcoCoseno, acos x


Restituisce l’angolo sessagesimale (0-180) il cui coseno è x.

ArcoSeno, asen x


Restituisce l’angolo sessagesimale il cui seno è x.

ArcoTangente, atan x


Restituisce l’angolo sessagesimale la cui tangente è x.

pi


Restituisce il numero di pi greco (3.141592653589793).

Casuale n


Restituisce un numero intero compreso tra 0 e n - 1.

Casuale01


Restituisce un numero casuale compreso tra 0 e 1.

Assoluto, Ass x


Restituisce il valore assoluto del numero x (il numero privo di segno).

ImpostaDecimali, ImpDec n


Restituisce il numero di decimali utilizzati nel calcolo. In dettaglio:

Questa primitiva è utile nel calcolo ad alta precisione. Confronta l’esempio con il numero pi greco a pagina §.

Decimali


Restituisce il numero di decimali permessi nel calcolo. Il valore predefinito è -1.

Importante: Attenzione alle primitive che richiedono due parametri!
Esempio:
ImpXY  a b Se b è negativo
Per esempio, setxy  200 -10

L’interprete LOGO eseguirà l’operazione 200-10 (sottrarrà 10 da 200). Esisterà quindi un solo parametro (190) laddove ne occorreranno due e si genererà un messaggio di errore. Per evitare questo tipo di problemi bisognerà utilizzare la primitiva “meno” per specificare un numero negativo. Esempio: ImpXY 200 meno 10.

A.3 Operazioni logiche

o b1 b2


Restituisce vero se b1 o b2 sono veri, altrimenti restituisce falso.

e b1 b2


Restituisce vero se b1 e b2 sono veri, altrimenti restituisce falso.

not b1


Restituisce la negazione di b1.

A.4 Operazioni sugli elenchi e sulle parole

Le seguenti primitive manipolano gli elementi degli elenchi o le lettere delle parole. Gli esempi di utilizzo delle primitive sono posti alla fine del paragrafo.

Parola arg1 arg2


Restituisce una parola concatenando arg1 e arg2.

Elenco arg1 arg2


Restituisce un elenco composto da arg1 e arg2.

Frase arg1 arg2


Restituisce un elenco composto da arg1 e arg2. Se arg1 o arg2 è un elenco esso stesso, ciascun elemento di arg1 e arg2 diventerà un elemento dell’elenco risultante (le parentesi quadre vengno rimosse).

InserisciElementoInizioElenco, IElenco arg1 elenco1


Restituisce un elenco inserendo arg1 come primo elemento in elenco1.

AggiungiElementoFineElenco, FElenco arg1 elenco1


Restituisce un elenco inserendo arg1 come ultimo elemento in elenco1.

Inverso elenco


Inverte l’ordine degli elementi in elenco.

Scegli arg1


Restituisce un elemento casuale se arg1 è un elenco o una lettera casuale se arg1 è una parola.

Rimuovi arg1 elenco1


Restituisce un elenco da elenco1 dal quale l’elemento arg1, se presente, è rimosso.

Elemento n arg2


Restituisce la lettera n-esima se arg2 è una parola o l’elemento n-esimo se arg2 è un elenco.

EccettoUltimo, EU arg1


Restituisce una parola privata dell’ultima lettera se arg1 è una parola o un elenco privato dell’ultimo elemento se arg1 è un elenco.

EccettoPrimo, EP arg1


Restituisce una parola privata della prima lettera se arg1 è una parola o un elenco privato del primo elemento se arg1 è un elenco.

Ultimo arg1


Restituisce una parola costituita dall’ultima lettera se arg1 è una parola o l’ultimo elemento se arg1 è un elenco.

Primo arg1


Restituisce una parola costituita dalla prima lettera se arg1 è una parola o il primo elemento se arg1 è un elenco.

Sostituisci, ImpostaElemento elenco1 n arg3


Sostituisce l’elemento n-esimo nell’elenco elenco1, con la parola o elenco arg3.

AggiungiElemento, Aggiungi, AE elenco1 n arg3


Aggiunge alla posizione n-esimo nell’elenco elenco1 la parola o l’elenco arg3

Conta arg1


Restituisce il numero di lettere se arg1 è una parola o il numero di elementi se arg1 è un elenco.

UniCode carattere1


Restituisce il valore unicode del carattere carattere1.

Carattere, Car n


Restituisce il carattere il cui valore unicode è n.

A.4.1 Esempi di utilizzo



Istruzione
Risultato


Stampa Parola "a 1
"a1


Stampa Elenco 3 6
[3 6]


Stampa Elenco "a "elenco
[a elenco]


Stampa Frase [4 3] "ciao
[4 3 ciao]


Stampa Frase [come vanno] "le cose
[come vanno le cose]


Stampa IElenco "cocoa [2]
[cocoa 2]


Stampa FElenco "cocoa [2]
[2 cocoa]


Stampa Inverso [1 2 3]
[3 2 1]


Stampa Rimuovi "ciao [1 2 ciao 3]
[1 2 3]


Stampa Sostituisci [a b c] 2 8
[a 8 c]


Stampa Aggiungi [a b c] 2 8
[a 8 b c]


Stampa UniCode "A
65


Stampa Carattere 65
"A


A.5 Booleani

Un booleano è una primitiva che restituisce la parola "vero o la parole "falso. Le primitive booleane terminano con il punto interrogativo.

vero


Restituisce "vero.

falso


Restituisce "falso.

Parola? arg1


Restituisce vero se arg1 è una parola, falso altrimenti.

Numero? arg1


Restituisce vero se arg1 è un numero, falso altrimenti.

Intero? arg1


Restituisce vero se arg1 è un numero intero, falso altrimenti.

Elenco? arg1


Restituisce vero se arg1 è un elenco, falso altrimenti.

Vuoto? arg1


Restituisce vero se arg1 è un elenco vuoto o una parola vuota, falso altrimenti.

Uguale? arg1 arg2


Restituisce vero se arg1 e arg2 sono uguali, falso altrimenti.

Prima? parola1 parola2


Restituisce vero se parola2 si trova prima di word2 nell’ordine alfabetico, falso altrimenti.

Membro? arg1 arg2


Restituisce vero se arg1 è un elemento dell’elenco arg2 o se arg1 è una lettera della parola arg2.

Membro arg1 arg2


Restituisce una parola o un elenco a partire dalla prima occorrenza di arg1 in arg2.



Istruzione
Risultato


Stampa Membro 3 [1 2 3 4]
[3 4]


Stampa Membro "o "cocoa
"ocoa


PennaGiu?, PennaGiu, PG


Restituisce la parola vero se la penna è poggiata sull’area di disegno, falso altrimenti.

Visibile?


Restituisce vero se la tartaruga è visibile, falso altrimenti

Primitiva? parola1


Restituisce vero se parola1 è una primitiva XLOGO, falso altrimenti.

Procedura? parola1


Restituisce vero se parola1 è una procedura definita nel programma logo, falso altrimenti.

Variabile? Var? parola1


Restituisce vero se parola1 è una variabile, falso altrimenti.

A.6 Verifica delle espressioni con la primitiva Se

Come in tutti i linguaggi di programmazione, Logo permette di verificare se una condizione è soddisfatta o meno e quindi eseguire le istruzioni desiderate in un caso o nell’altro.
Con la primitiva Se si possono realizzare queste verifiche.

Se espressione_da_verificare elenco1 elenco2


Se espressione_da_verificare è vero, le istruzioni incluse in elenco1 vengono eseguite. Altrimenti, se espressione_da_verificare è falso, le istruzioni in elenco2 vengono eseguite. Questo secondo elenco è opzionale.

Esempi:

Importante: Quando il risultato della verifica è uguale a falso, la primitiva Se cerca il secondo elenco. In alcuni rari casi la ricerca non è possibile e si dovrà utilizzare la primitiva SeAltrimenti . Per esempio:


Codice A.3: Uso della primitiva Se non corretto
Per test 
  # Inseriamo due liste nelle variabili a e b 
  AssegnaVar "a [Stampa "vero] 
  AssegnaVar "b [Stampa "falso] 
 
  # Test con la primitiva Se, la seconda lista non viene ricercata. 
  Se 1=2 :a :b 
Fine

L’esempio precedente genera un errore Non so cosa fare con [ Stampa "falso ] ?. Il seguente esempio invece funziona correttamente:


Codice A.4: Uso della primitiva SeAltrimenti corretto
Per test 
  # Inseriamo due liste nelle variabili a e b 
  AssegnaVar "a [Stampa "vero] 
  AssegnaVar "b [Stampa "falso] 
 
  # Test con la primitiva SeAltrimenti --> la seconda lista viene cercata ed eseguita. 
  SeAltrimenti 1=2 :a :b 
Fine

A.7 I cicli

Un ciclo permetto di eseguire un blocco di primitive o procedure per un numero determinato o meno di volte. Il vantaggio dei cicli è quello di far svolgere compiti ripetitivi al programma invece che al programmatore. Invece di disegnare i quattro lati del quadrato così:


Codice A.5: Un semplice quadrato
  Avanti 100 RuotaDestra 90 
  Avanti 100 RuotaDestra 90 
  Avanti 100 RuotaDestra 90 
  Avanti 100 RuotaDestra 90

possiamo utilizzare un ciclo:

  Ripeti 4 [Avanti 100 RuotaDestra 90]

XLOGO possiede sette primitive che permettono la costruzione di cicli: Ripeti, RipetiPer , Mentre, RipetiPerCiascuno, RipetiPerSempre, RipetiIntantoChe e RipetiFinoAChe.

A.7.1 Ripeti

Ripeti n elenco_di_comandi


Ripete elenco_di_comandi n volte.
n è un numero intero e elenco_di_comandi è un elenco contenente i comandi da eseguire. L’interprete LOGO implementerà i comandi nell’elenco n volte, evitando di dover copiare gli stessi comandi n volte!
Esempio:
Codice A.6: Cicli per disegnare poligoni regolari
Ripeti 4 [Avanti 100 RuotaDestra 90]      # Un quadrato di lato 100 
Ripeti 6 [Avanti 100 RuoraDestra 60]      # Un esagono di lato 100 
Ripeti 360 [Avanti 2 RuotaDestra 1]       # Un poligono di 360 lati di lunghezza 2, 
                                          # cioe una circonferenza!

ContaRipetizione


E’ una variabile interna e restituisce il numero della iterazione attuale (a partire da 1), deve essere incluso in un ciclo Ripeti.
Codice A.7: Esempio di uso di ContaRipetizione
Ripeti 3 [Stampa ContaRipetizione] 
# 1 
# 2 
# 3

A.7.2 RipetiPer

RipetiPer elenco1 elenco2


RipetiPer esegue un ciclo assegnando ad una variabile valori successivi all’interno di un intervallo fisso, con incrementi definiti.
elenco1 è un elenco di quattro elementi:
  1. il nome della variabile
  2. il valore di partenza dell’intervallo
  3. il valore terminale dell’intervallo
  4. il valore dell’incremento (elemento opzionale nell’elenco, se non viene fornito viene assunto il valore di 1 come incremento predefinito)

Codice A.8: Esempio di uso di RipetiPer
RipetiPer [i 1 4][Stampa :i*2] 
# Visualizzera a schermo i numeri 
# 2 
# 4 
# 6 
# 8

Codice A.9: Esempio più complesso di uso di RipetiPer
# i scendera da 7 a 2, con un decremento di 1,5 
# Visualizzera il quadrato di i 
RipetiPer [i 7 2 -1.5 ][Stampa Elenco :i Potenza :i 2] 
# 7 49 
# 5.5 30.25 
# 4 16 
# 2.5 6.25

A.7.3 Mentre

Mentre elenco_da_verificare elenco_di_comandi


Al contrario di Ripeti e RipetiPer, la primitiva Mentre esegue un ciclo per un numero di volte che può non essere conosciuto a priori. elenco_da_verificare è un elenco contenente un set di istruzioni che devono essere verificate come booleane. elenco_di_comandi è un elenco contenente i comandi da eseguire all’interno del ciclo. L’interprete LOGO continuerà l’esecuzione di elenco_di_comandi fintanto ché elenco_da_verificare restituisce "vero.
Esempi:

Codice A.10: La tartaruga ruota a destra all’infinito
Mentre ["vero] [RuotaDestra 1]

Codice A.11: Viene percorso l’alfabeto all’indietro
AssegnaVar "alfa "abcdefghilmnopqrstuvz 
Mentre [non Vuoto? :alfa] 
  [Stampa Ultimo :alfa AssegnaVar "alfa EccettoUltimo :alfa]

A.7.4 RipetiPerCiascuno

RipetiPerCiascuno nome_variabile arg1 istruzioni


Esegue un ciclo per ciascun elemento di arg1 se è un elenco o per ciascun carattere se arg1 è una parola. Le istruzioni contenute nell’elenco istruzioni sono ripetute per ciascun valore della variabile nome_variabile.

Esempi:


Codice A.12: Stampa i caratteri in “XLOGO”
RipetiPerCiascuno "i "XLOGO [Stampa :i]

Codice A.13: Stampa gli elementi dell’elenco “[a b c
RipetiPerCiascuno "i [a b c] [Stampa :i]

Codice A.14: Somma tutti i numeri da 1 a 5
AssegnaVar "sum 0 
RipetiPerCiascuno "i 12345 [AssegnaVar "sum :sum+:i] Stampa :sum

A.7.5 RipetiPerSempre

RipetiPerSempre elenco_istruzioni


Ripete per sempre un blocco di istruzioni in attesa di un comando per fermare il ciclo (cfr. pagina §).

Codice A.15: Un ciclo infinito
RipetiPerSempre [Avanti 1 RuotaDestra 1]

Attenzione usando questa primitiva ai clicli infiniti!

A.7.6 RipetiIntantoChe

RipetiIntantoChe elenco1 elenco2


Ripete un blocco di istruzioni contenuto in elenco1 mentre elenco2 è vero.
La differenza con la primitiva Mentre è che il blocco di istruzioni è eseguito almeno una volta anche se elenco2 è falso perché la verifica dell’espressione avviene dopo l’esecuzione del blocco di istruzioni.

Per esempio vediamo la differenza tra i due tipi di ciclo eseguendo lo stesso blocco di istruzioni: RipetiIntantoChe esegue il ciclo 5 volte:


Codice A.16: Esempio di ciclo con condizione (vera) alla fine
AssegnaVar "i 0 
RipetiIntantoChe [Stampa :i AssegnaVar "i :i+1] [:i<4]

Mentre esegue il ciclo 4 volte:


Codice A.17: Esempio di ciclo con condizione all’inizio
AssegnaVar "i 0 
Mentre [:i<4][Stampa :i AssegnaVar "i :i+1]

A.7.7 RipetiFinoAChe

RipetiFinoAChe elenco1 elenco2


Ripete il blocco di istruzioni contenuto in elenco1 fino a ché elenco2 diventa vero. Per esempio scriviamo l’esempio precedente per essere eseguito con RipetiFinoAChe:
Codice A.18: Esempio di ciclo con condizione (falsa) alla fine
AssegnaVar "i 0 
RipetiFinoAChe [Stampa :i AssegnaVar "i :i+1] [:i>4]

A.8 L’area di lavoro

L’area di lavoro contiene tutti gli elementi definiti dall’utente:

A.8.1 Le procedure

Le procedure sono una sorta di “programma”. Ogni procedura ha un nome scelto dall’utente, quando il nome di una procedura viene invocato, le istruzioni contenute nel corpo della procedura sono eseguite. Il corpo delle procedure comincia con la primitiva Per e termina con la primitiva Fine.


Codice A.19: Sintassi di una procedura
Per nome_della_procedura :v1 :v2 :v3 .... [:v4 ....] [:v5 ....] 
  Corpo_della_procedura 
Fine


Codice A.20: Una semplice procedura
Per Quadrato :s 
  Ripeti 4[Av :s DX 90] 
Fine

La procedura è chiamata Quadrato e richiede un parametro chiamato s. Quadrato 100 disegnerà quindi un quadrato di lato 100 (altri esempi di procedure sono al termine del manuale).

E’ possibile inserire dei commenti nel codice preceduti dal simbolo # (cancelletto).


Codice A.21: Commenti nel codice
Per Quadrato :s 
  # Questa procedura permette di disegnare un quadrato di lato s 
  Ripeti 4[Av :s DX 90] 
Fine

Definisci, Def parola1 elenco1


Definisce una nuova procedura chiamata parola1.
elenco1 contiene diversi elenchi:
Codice A.22: Definizione di una procedura
  Def "poligono [ [nb l] [Ripeti :nb[Av :l DX 360/:nb] ]

Questo comando definisce una procedura chiamata poligono che accetta due parametri (:nb e :l). La procedura disegna un poligono regolare di cui possiamo scegliere il numero di lati e la loro lunghezza.

Testo parola1


Restituisce tutte le informazioni sula procedura chiamata parola1. Restituisce un elenco che contiene numerosi elenchi.

Questa primitiva è ovviamente associata a Definisci.

Procedure, Procs


Restituisce un elenco con tutte le procedure attualmente definite.

CancellaProcedura, CancProc arg1


Cancella la procedura chiamata arg1 o tutte le procedure chiamate come gli elementi dell’elenco arg1.

Parametri opzionali

In XLOGO è possibile aggiungere parametri opzionali alle procedure. Un parametro opzionale è una variabile che è possibile o meno passare alla procedura al momento della sua invocazione. Se non viene passato, la procedura utilizzerà per esso un valore preimpostato. Per esempio:


Codice A.23: Procedura con un parametro opzionale
Per poly :n [:l 10] 
# Questa procedura disegna un poligono 
# regolare di n lati lunghi l passi 
Ripeti :n [Av :l DX 360/:n] 
end

Durante l’esecuzione, la variabile :l viene rimpiazzata dal suo valore preimpostato (10, come definito in [:l 10]). Se si vuole disegnare un poligono regolare con lati di lunghezza diversa dal valore preimpostato basterà invocare la procedura poly specificando il valore di l ed inserendo l’invocazione in parentesi tonde. Per esempio:


Codice A.24: Invocazione di una procedura con un parametro opzionale
# Questo comando disegna un poligono regolare di 20 lati lunghi 5 passi 
(poly 20 5) 
# Questo e un quadrato di 10 passi di lato 
(poly 4)

La modalità di tracciamento

E’ possibile seguire il funzionamento del programma e delle procedure durante l’esecuzione. Questa modalità può anche mostrare se la procedura fornisce argomenti grazie alla primitiva Output. Tracciare un programma che funziona in modo non corretto può essere molto utile per capire dove risiedano gli errori di programmazione.

traccia


Attiva la modalità di tracciamento.


Disattiva la modalità di tracciamento.

Un piccolo esempio con il programma fattoriale (pagina §).
Codice A.25: Tracciamento di un programma
traccia Stampa fac 4 
#fac 4 
#  fac 3 
#    fac 2 
#      fac 1 
#      fac restituisce 1 
#    fac restituisce 2 
#  fac restituisce 6 
#fac restituisce 24 
#24

A.8.2 Il concetto di variabili

Le variabili sono come dei contenitori che possono essere riempiti di contenuti come parole, caratteri, numeri. Ci sono due tipi di variabili:

Per utilizzare una variabile occorre prima crearla e quindi assegnarle il o i valori desiderati. Durante la creazione e l’assegnazione alla futura variabile viene indicata come fosse una stringa, ossia aggiungendo il carattere “"” all’inizio del suo nome.
Nella fase di lettura del suo contenuto la variabile deve essere indicata come variabile, ossia aggiungendo il carattere “:” all’inizio del suo nome oppure utilizzare la primitiva ValoreVar.

Variabili globali

Le variabili globali si creano e ne viene assegnato il contenuto con la primitiva AssegnaVar.

AssegnaVar parola1 arg2


Se la variabile locale parola1 esiste, ne assegna il valore arg2. Se non esiste crea una variabile globale parola1 e ne assegna il valore arg2.
Esempio:
Codice A.26: Esempio di creazione ed assegnazione di variabile globale
AssegnaVar "a 100 # Assegna il valore 100 alla variabile a 
Stampa :a # Stampa il valore 100

Variabili locali

AssegnaVarLocale parola1 arg2


Crea una nuova variabile locale e ne assegna il valore arg2. È l’analogo di AssegnaVar, ma nell’ambito della procedura.

Codice A.27: Esempio di funzionamento delle variabili locali
Per test 
  AssegnaVarLocale "b 100 # Assegna il valore 100 alla variabile b 
  Stampa :b # Stampa il valore 100 
Fine 
 
Per prova 
  Stampa :b 
Fine 
 
test 
prova 
# Errore: 
# In prova, Linea 1 
# b non ha un valore

VarLocale arg1


Crea una variabile locale chiamata arg1. Se arg1 è un elenco, crea tante variabili quanti sono gli elementi nell’elenco. Da notare che le variabili sono solo create, nessun valore viene loro assegnato.

Ulteriori primitive sulle variabili

Variabili, Vars


Restituisce un elenco con tutte le variabili definite.

CancellaVariabile, CancVar arg1


Cancella la variabile arg1 o tutte le variabili chiamate come gli elementi dell’elenco arg1.

ValoreVar parola1


Restituisce il valore contenuto nella variabile parola1. ValoreVar "a è simile a :a

A.8.3 Gli elenchi di proprietà

E’ possibile definire elenchi proprietà in XLOGO. Ciascun elenco di proprietà ha un suo nome e contiene coppie chiave-valore specifici (chiamati proprietà).

Per esempio, si può definire un elenco proprietà chiamato “macchina” contenente la chiave “colore” associato al valore “rosso” o la chiave “trazione” con il valore “4x4”.

Per gestire questi elenchi si possono utilizzare le seguenti primitive.

AggiungiProprieta, AggiungiProprietà nomeelenco chiave valore


Aggiunge una proprietà all’elenco di proprietà chiamato nomeelenco. valore sarà accessibile con la chiave chiave. Se non esiste alcun nomeelenco verrà creato..

ElencaProprieta, ElencaProprietà nomeelenco chiave


Restituisce il valore associato alla chiave chiave nell’elenco di proprietà chiamato nomeelenco. Se questo elenco di proprietà non esiste o se non esiste alcuna chiave valida, restituisce un elenco vuoto.

CancellaProprieta, CancellaProprietà nomeelenco chiave


Cancella la proprietà corrispondente alla chiave key nell’elenco proprietà nomeelenco.

ElencaProprieta, ElencaProprietà nomeelenco


Elenca tutte le proprietà contenute nell’elenco proprietà nomeelenco.

ElencoProprietà, ElencoProprieta


Restituisce un elenco con tutti gli elenchi proprietà attualmente definiti.

CancEP, CancellaElencoProprietà, CancellaElencoProprietal arg1


Cancella l’elenco proprietà arg1 o tutte gli elenchi proprietà chiamati come gli elementi dell’elenco arg1.

Codice A.28: Un esempio di impiego dell’elenco di proprietà
# Creiamo lelenco di proprieta 
AggiungiProprieta "macchina "colore "red 
AggiungiProprieta "macchina "trazione "4x4 
AggiungiProprieta "macchina "marca "Citroen 
 
# Mostriamo un valore 
Stampa ElencaProprieta "macchina "colore 
# rosso 
 
# Mostriamo tutti i valori 
Stampa ElencaProprieta "macchina 
# colore rosso trazione 4x4 marca Citroen

A.8.4 Ancora sull’area di lavoro

CancellaTutte, CancTutte


Cancella tutte le variabili, elenchi proprietà e procedure attualmente in funzione.

ciao


Chiude XLOGO.

Primitive


Enumera tutte tutte le primitive definite nel linguaggio attuale.

Contenuti


Restituisce un elenco che contiene tre elenchi. Il primo elenco contiene tutti i nomi delle procedure, il secondo tutti i nomi delle variabili, il terzo tutti gli elenchi proprietà.

Lancia elenco1


Esegue l’elenco di istruzioni contenute in elenco1.

ComandoEsterno elenco1


Esegue un comando di sistema da XLOGO. elenco1 deve contenere diversi elenchi che rappresentano qualsiasi parola costituente il comando. Alcuni esempi:

ComandoEsterno [[gedit][/home/xlogo/file.txt]]
Lancia l’applicazione gedit e carica il file /home/xlogo/file.txt (Linux)

ComandoEsterno [[notepad][C: /file.txt]]
Lancia l’applicazione notepad e carica il file chiamato C: /file.txt (Windows)

La sintassi del comando permette l’inserimento di spazi bianchi nel percorso del file.

A.9 Lavorare con i file

File


Come comportamento predefinito, elenca il contenuto della cartella (come il comando ls in Linux e dir in DOS).

CaricaImmagine, CI elenco


Carica il file immagine contenuto in elenco. Il suo angolo in alto a sinistra viene posto alla posizione attuale della tartaruga. I formati immagine supportati sono .png e .jpg. Il percorso specificato deve essere relativo alla cartella attuale. Esempio: ImpDir "C:\\my_images_dir CaricaImmagine "turtle.jpg

SalvaImmagine parola elenco


Salva l’immagine dell’area di disegno nel file specificato in parola nella cartella attuale.
I formati immagine supportati sono .png e .jpg. Se l’estensione non viene specificata l’immagine verrà salvata nel formato .png.
L’elenco elenco può contenere quattro numeri ([XminY minXmaxY max]) che rappresentano i due angoli della zona dell’area di disegno da salvare. Un elenco vuoto è equivalente a salvare l’intera immagine. Per esempio:
Codice A.29: Salvare immagini su disco
## Nelleditor 
Per test 
  # Salva tutte le immagini come 1.png, 2.png ... 20.png 
  Ripeti 20 [ 
    Avanti 30 DX 18 
      SalvaImmagine Parola ContaRipetizioni ".png  [-50 150 200 -150] 
  ] 
Fine 
 
## Sulla linea di comando: 
test 
PulisciSchermo NascondiTartaruga 
Ripeti 20 [CaricaImmagine Parola ContaRipetizioni ".png]

Avete creato una breve animazione!

ImpostaDirectory, ImpDir parola1


Imposta la cartella attuale. Il percorso deve essere assoluto. La cartella deve essere specificata come una parola.

CambiaDirectory, CD parola1


Imposta la cartella attuale relativamente a quella attiva al momento. Si può utilizzare .. notazione per indicare la cartella a monte.

Directory, Dir


Restituisce la cartella attuale. La cartella preimpostata è quella dell’utente, cioè /home/login per utenti Linux, C:\WINDOWS per utenti Windows.

Salvato parola1


Salva tutte le procedure logo definite nel file parola1 nella cartella attuale. Se l’estensione .lgo viene omessa verrà aggiunta automaticamente. parola1 può contenere un percorso relativo alla cartella attuale, non un percorso assoluto.

Salva parola1 elenco1


Salve le procedure logo definite in elenco1 nel file parola1. Se l’estensione .lgo viene omessa verrà aggiunta automaticamente. parola1 può contenere un percorso relativo alla cartella attuale, non un percorso assoluto. Per esempio: Salva test.lgo [proc1 proc2 proc3] salva nel file test.lgo nella cartella attuale le procedure proc1, proc2, proc3.

Carica parola1


Apre e legge il file logo parola1. Per esempio, per cancellare tutte le procedure definite e caricare il file test.lgo, si userà: CancellaTutte Carica test.lgo. parola1 può contenere un percorso relativo alla cartella attuale ma non un percorso assolto.

ApriFlusso id file


Quando si vuole leggere o scrivere in un file, occorre prima aprire un flusso verso il file stesso. L’argomento file deve essere il nome del file desiderato. id è un numero assegnato al flusso per identificarlo nelle successive operazioni

ElencaFlussi


Elenca i vari flussi aperti con i loro id.

LeggiLineaDalFlusso id


Legge una linea dal file corrispondente al flusso id.

LeggiCarattereDalFlusso id


Legge un carattere dal file corrispondente al flusso id. Restituisce un numero che rappresenta il valore del carattere (in modo simile a LeggiCarattere).

ScriviLineaNelFlusso id list


Scrive la linea di testo inclusa in list all’inizio del file identificato da id. Attenzione, la effettiva scrittura avverrà dopo la chiusura del flusso con la primitiva ChiudiFlusso.

AggiungiLineaNelFlusso id list


Scrive la linea di testo inclusa in list alla fine del file identificato da id. Attenzione, la effettiva scrittura avverrà dopo la chiusura del flusso con la primitiva ChiudiFlusso.

ChiudiFlusso id


Chiude il flusso identificato da id.

FineFlusso? id


Restituisce vero se si è al termine del file identificato da id, altrimenti restituisce falso.

Di seguito si espone un semplice programma per leggere e scrivere in un file. E’ pensato per utenti di sistemi Windows ma gli altri utenti lo potranno facilmente adattare.

Lo scopo dell’esempio è creare il file c:\esempio contenente le seguenti tre righe:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
Abcdefghijklmnopqrstuvwxyz
0123456789


Codice A.30: Esempio di scrittura di un file
# Apriamo un flusso verso il file desiderato e lo identifichiamo con il flusso 2 
ImpostaDirectory "c:\\ 
ApriFlusso 2 "esempio 
# Scriviamo le righe volute 
ScriviLineaNelFlusso 2 [ABCDEFGHIJKLMNOPQRSTUVWXYZ] 
ScriviLineaNelFlusso 2 [Abcdefghijklmnopqrstuvwxyz] 
ScriviLineaNelFlusso 2 [0123456789] 
# Chiudiamo il flusso per concludere la scrittura 
ChiudiFlusso 2

Possiamo verificare se la procedura di scrittura è andata a buon fine:


Codice A.31: Esempio di lettura di un file
# Apriamo un flusso verso il file desiderato e lo identifichiamo con il flusso 0 
ApriFlusso 0 "c:\\esempio 
# Leggiamo una riga dopo laltra dal file 
Stampa LeggiLineaDalFlusso 0 
Stampa LeggiLineaDalFlusso 0 
Stampa LeggiLineaDalFlusso 0 
# Chiudiamo il flusso 
ChiudiFlusso 0

Se volessimo aggiungere la linea "Grandioso:


Codice A.32: Esempio di scrittura al termine di un file
ImpostaDirectory "c:\\ 
ApriFlusso 1 "esempio 
AggiungiLineaNelFlusso 1 [Grandioso] 
ChiudiFlusso 1

A.10 L’editor

edit arg1


Apre l’editor con tutte le procedure specificate nell’elenco arg1 o nella parola arg1.

ModificaTutte, ModTutte


Apre l’editor con tutte le procedure attualmente definite.

A.11 Funzioni avanzate di riempimento delle figure

Tre primitive permettono di colorare una figura. La primitiva Riempi, RiempiZona e RiempiPoligono. .

A.11.1 Riempi e RiempiZona

Queste primitive permettono di riempire una figura e sono molto simili alle funzioni di riempimento che si trovano nei programmi di grafica e ritocco fotografico. Il riempimento si può estendere fino ai margini dell’area di disegno. Ci sono due regole che devono essere osservate per ottenere risultati corretti dalle due primitive:

  1. La penna deve essere abbassata (PG).
  2. La tartaruga non deve essere posizionata su un punto del medesimo colore con cui si intende riempire l’area.

Vediamo un esempio per comprendere la differenza tra Riempi e RiempiZona:


PIC


Figura A.1: All’inizio

Il punto sotto la tartaruga è bianco. La primitiva Riempi colorerà tutti i punti bianchi vicini con il colore della penna attuale. Digitiamo, per esempio: ImpCP 1 Riempi.


PIC


Figura A.2: Con la primitiva Riempi


Torniamo al primo caso, se il colore della penna è nero la primitiva RiempiZona colorerà tutti i punti fino a ché incontrerà il colore attuale (nero).


PIC


Figura A.3: Con la primitiva RiempiZona, se si digita: ImpCP 0 RiempiZona

Il seguente è un buon esempio di utilizzo di Riempi:


Codice A.33: Disegniamo e coloriamo un arcobaleno
per halfcirc :c 
# disegna una semi-circonferenza di diametro :c 
  Ripeti 180 [Avanti :c*Tangente 0.5 RuotaDestra 1] 
  Avanti :c*Tangente 0.5 
  RuotaDestra 90 Avanti :c 
fine 
 
per arcobaleno :c 
  Se :c<100 [Ferma] 
  halfcirc :c RuotaDestra 180 Avanti 20 RuotaSinistra 90 
  arcobaleno :c-40 
fine 
 
per dep 
  PennaSu RuotaDestra 90 Avanti 20 RuotaSinistra 90 PennaGiu 
fine 
 
per SemiArco 
  NascondiTartaruga PennaSu ImpXY meno 200 meno 200 PennaGiu 
  arcobaleno 400 
  CancellaPenna RuotaSinistra 90 Avanti 20 Indietro 120 PennaDisegno 
  PennaSu RuotaDestra 90 Avanti 20 PennaGiu 
  ImpostaColorePenna 0 Riempi dep 
  ImpostaColorePenna 1 Riempi dep 
  ImpostaColorePenna 2 Riempi dep 
  ImpostaColorePenna 3 Riempi dep 
  ImpostaColorePenna 4 Riempi dep 
  ImpostaColorePenna 5 Riempi dep 
  ImpostaColorePenna 6 Riempi dep 
fine

PIC

Figura A.4: Arco in LOGO

A.11.2 RiempiPoligono

RiempiPoligono elenco


Riempie una figura usando una serie di triangoli in modo che ogni volta si disegna una linea, viene riempito il triangolo successivo. L’elenco contiene tutte le istruzioni necessarie per disegnare la figura da riempire.

A.12 Comandi di interruzione

Un comando di interruzione può essere impiegato nel programma logo per terminare il programma stesso o una procedura o un ciclo. XLOGO ha tre comandi di interruzione: Ferma, FermaTutto e Output.

Ferma


Interrompe l’esecuzione di una procedura o di un ciclo Ripeti o Mentre a seconda di dove lo si include.

FermaTutto


Il programma esce da tutte le procedure e si interrompe.

Output


Come Ferma interrompe una procedura ma, a differenza di questo, permette di restituire un valore.

A.13 Modalità multitartaruga

E’ possibile avere più di una tartaruga attiva nell’area di disegno. Per impostazione predefinita, solo una tartaruga è disponibile. Per “creare” una nuova tartaruga si può usare la primitiva ImpostaTartaruga seguito dal numero di tartarughe voluto. Quando ci sono più tartarughe sull’area di disegno, solo una sarà quella attiva che risponderà ai comandi. Per prevenire ostacoli la tartaruga è creata all’origine ed è invisibile (occorre usare MostraTartaruga per visualizzarla). La nuova tartaruga è la tartaruga attiva, obbedisce a tutte le classiche primitive fino a ché non si cambierà la tartaruga attiva con ImpostaTartaruga. Il numero massimo di tartarughe può essere impostato nel Menu StrumentiPreferenze.

Queste sono le primitive per la modalità multitartaruga:

ImpostaTartaruga, ImpTar n


La tartaruga numero n diventa la tartaruga attiva. Per impostazione predefinita la tartaruga attiva all’avvio di XLOGO è la numero 0, la sola visualizzata.

Tartaruga


Restituisce il numero della tartaruga attiva.

Tartarughe


Restituisce un elenco che contiene tutti i numeri delle tartarughe attualmente sull’area di disegno.

CancellaTartaruga, CancT n


Elimina la tartaruga numero n.

ImpNumMaxT, ImpostaNumeroMassimoTartarughe n


Imposta il numero massimo di tartarughe in modalità multitartaruga.

NumMaxT, NumMaxTartarughe


Restituisce il numero massimo di tartarughe nella modalità multitartaruga.

A.14 La tartaruga e le 3 dimensioni

La tartaruga può lasciare il piano di disegno bidimensionale e spostarsi nelle 3 dimensioni. Per entrare nella modalità 3D si utilizza la primitiva Prospettiva, 3D. Benvenuti nel mondo 3D!

A.14.1 La proiezione prospettica

Per rappresentare lo spazio 3D su un piano 2D XLOGO utilizza la proiezione prospettica. Una cinepresa viene puntata alla scena 3D, dove l’immagine dallo schermo di proiezione viene visualizzata. Ecco un semplice schema esemplificativo:

PIC

Alcune primitive permettono di impostare la posizione della cinepresa. Lo schermo di proiezione è posto a metà della distanza dalla cinepresa.

A.14.2 Capire l’orientamento in un mondo 3D

In un piano 2D l’orientamento della tartaruga è definito solo dalla sua direzione. In un mondo 3D l’orientamento della tartaruga è definito da 3 angoli:

Nei fatti, per spostarsi in un mondo 3D, la tartaruga è molto simile ad un aereo. Di seguito una piccola illustrazione che rappresenta questi 3 valori:

PIC Rollio

PIC Beccheggio

PIC Direzione



Può sembrare un pò complesso all’inizio ma molti aspetti tendono ad essere molto simili allo spazio 2D. Queste sono le primitive di base per spostarsi in un mondo 3D:

Avanti, Av, Indietro, In n


Stesso comportamento nel piano 2D e 3D.

Destra, DX, Sinistra, SX n


Stesso comportamento nel piano 2D e 3D.

RollioDestra, RDX n


La tartaruga ruota di n gradi alla destra attorno al suo asse longitudinale.

RollioSinistra, RSX n


La tartaruga ruota di n gradi alla sinistra attorno al suo asse longitudinale.

BeccheggiaSu, BeccheggiaSù, BS n


La tartaruga ruota di n gradi in sù attorno al suo asse trasversale.

BeccheggiaGiu, BeccheggiaGiù, BG n


La tartaruga ruota di n gradi in giù attorno al suo asse trasversale. Nel piano bidimensionale, quando vogliamo disegnare un quadrato di latto 200, scriviamo Ripeti 4[Av 200 DX 90]. Queste primitive sono disponibili nel mondo 3D dove il quadrato è disegnato in modalità prospettica. Se la tartaruga ruota in giù di 90 gradi possiamo disegnare un altro quadrato e otteniamo:

Codice A.34: Due quadrati in 3D
  PulisciSchermo 
  Ripeti 4[Av 200 DX 90] 
  BeccheggiaGiu 90 
  Ripeti 4[Av 200 DX 90]

PIC


Occorre provare qualche esempio per capire questi angoli e diventare un esperto!
Le tre primitive di rotazione sono collegate fra loro, per esempio si può provare il seguente codice:

Codice A.35: Movimento della tartaruga in 3D equivalente a Sinistra 90.
  PulisciSchermo 
  RollioSinistra 90 BeccheggiaSu 90 RollioDestra 90

A.14.3 Primitive disponibili sia in modalità 2D sia in 3D

Le seguenti primitive sono disponibili nel piano bidimensionale e tridimensionale. La sola differenza risiede negli argomenti forniti alle primitive. Per esempio la primitiva ImpostaPosizione o ImpPos si aspetta un elenco come argomento ma, in modalità 3D, l’elenco deve contenere tre numeri (x;y;z) che rappresentano le coordinate rispetto ai 3 assi. Questo è l’elenco di queste primitive:





Cerchio, Circonferenza Arco Origine Verso




Distanza ImpPos, ImpostaPosizione ImpX, ImpostaX ImpY, ImpostaY




ImpDir, ImpostaDirezione Etichetta LunghezzaEtichetta, LE Punto




Posizione, Pos Direzione





A.14.4 Primitive disponibili solo in modalità 3D

ImpostaXYZ, ImpXYZ x y z


Imposta la posizione della tartaruga nello spazio 3D. Accetta 3 argomenti ossia le coordinate x, y, z del punto desiderato. ImpXYZ è molto simile a ImpPos ma, a differenza di quest’ultimo, le coordinate non sono fornite come elenco.
Per esempio, ImpXYX -100 200 50: sposta la tartaruga al punto di coordinate x = -100;y = 200;z = 50

ImpZ z


Sposta la tartaruga al punto con un valido valore z. ImpZ richiede un numero come argomento. Questa primitiva è analoga a ImpX e ImpY.

ImpostaOrientamento, ImpOr elenco


Imposta l’orientamento della tartaruga. Questa primitiva accetta un elenco di tre elementi come argomento: angolo di rollio, di beccheggio e di direzione.
Per esempio, ImpOr [100 0 58]: la tartaruga ha rollio pari a 100 gradi, beccheggio pari a 0, direzione 58 gradi.

Orientamento


Restituisce l’orientamento della tartaruga come un elenco che contiene [ rollio beccheggio direzione ]. Per esempio, se l’orientamento è [100 20 90], significa che se si desidera replicare lo stesso orientamento dalla posizione originale (dopo un PulisciSchermo) occorrerà spostare la tartaruga come segue:

RDX 100 BS 20 DX 90

Se si inverte l’ordine delle istruzioni, l’orientamento finale sarà diverso!

ImpostaRollio, ImpRol n


La tartaruga ruota attorno al suo asse longitudinale fino all’angolo fornito in argomento

Rollio


Restituisce il valore corrente di rollio.

ImpostaBeccheggio, ImpBec n


La tartaruga ruota attorno al suo asse trasversale fino all’angolo fornito in argomento.

Beccheggio


Restituisce il valore corrente di beccheggio.

A.14.5 Visualizzatore 3D

XLOGO include un visualizzatore 3D, permette di visualizzare i disegni in 3D. Questo modulo utilizza la libreria Java3D che, quindi, è un requisito di installazione per un funzionamento appropriato di questa modalità.

Il visualizzatore richiede l’osservanza di alcune regole:
quando si crea una figura geometrica nell’area di disegno occorre indicare al visualizzatore 3D quale forma si vuole disegnare per renderne possibile la futura visualizzazione. E’ possibile disegnare poligoni (superfici), linee, punti, o testo. Per usare questa possibilità occorre utilizzare le seguenti primitive:

InizioPoligono


I successivi movimenti della tartaruga sono salvati per creare un poligono.

FinePoligono


A partire dall’ultimo InizioPoligono, la tartaruga si è spostata attraverso numerosi vertici. Questo nuovo poligono è salvato, il suo colore è definito dal colore di tutti i vertici. Questa primitiva finalizza il poligono.

InizioLinea, IL


I successivi movimenti della tartaruga sono salvati per creare una linea.

FineLinea, FL


A partire dall’ultimo InizioLinea, la tartaruga si è spostata attraverso numerosi vertici. Questa nuova linea è salvata, il suo colore è definito dal colore di tutti i vertici. Questa primitiva finalizza la linea.

InizioPunto, IP


I successivi movimenti della tartaruga sono salvati per creare un set di punti.

FinePunto, FP


Finalizza il set di punti.

InizioTesto, IT


Ogni volta che si scrive del testo nell’area di disegno con la primitiva Etichetta, esso verrà salvato e quindi visualizzata dal visualizzatore 3D.

FineTesto, FT


Fine della registrazione del testo.

VistaPoligono3D, VP3D


Parte il visualizzatore 3D, tutti gli oggetti salvati sono disegnati in questa nuova finestra. Si ha il controllo della scena della cinepresa:

A.14.6 Disegnare un cubo

Tutte le facce sono quadrati di 400 passi. Questo è il programma:


Codice A.36: Disegno di un cubo in 3D
Per quadrato 
  # salviamo il quadrato verticale 
  InizioPoligono Ripeti 4[Avanti 400 RuotaDestra 90] FinePoligono 
Fine 
 
Per SempliceCubo 
  # cubo giallo 
  PulisciSchermo 3D ImpostaColorePenna Giallo 
  # facce laterali 
  Ripeti 4[quadrato PennaSu RuotaDestra 90 Avanti 400 RuotaSinistra 90 
  RollioDestra 90 PennaGiu] 
  # faccia inferiore 
  BeccheggiaGiu 90 quadrato BeccheggiaSu 90 
  # faccia superiore 
  Avanti 400 BeccheggiaGiu 90 quadrato 
  # visualizzazione 
  VistaPoligono3D 
Fine

Il programma si lancia con il comando: SempliceCubo:

PIC

Se sostituiamo nella procedura quadrato, InizioPoligono con InizioLinea e FinePoligono con FineLinea

PIC

Se si fosse utilizzata la primitiva InizioPunto e FinePunto invece di InizioLinea e FineLinea, si sarebbero visti su schermo solo gli otto vertici del cubo. Queste primitive sono molto utili per visualizzare il set di punti nello spazio 3D.

A.14.7 Illuminare la scena

Si possono impostare fino a quattro luci nella scena 3D. Come impostazione predefinita, la scena 3D ha solo due luci puntiformi abilitate. Cliccando su uno dei quattro bottoni delle luci nel modellizzatore 3D, la seguente finestra di dialogo comparirà:

PIC

Sono disponibili svariati tipi di illuminazione:

La cosa migliore è giocare con le illuminazioni per capire come funzionano!

A.14.8 Effetto nebbia

Si può aggiungere un effetto di opacità alla scena 3D cliccando sul bottone nebbia nella scena 3D:

PIC

Sono disponibili due tipi di nebbia:

Esempio con nebbia progressiva:

PIC

A.15 Riprodurre musica

A.15.1 Riprodurre musica usando il sintetizzatore MIDI

Per riprodurre musica MIDI occorre inserire lo spartito in un elenco di note (sequenza). Queste sono le regole da seguire per creare una sequenza valida:
do re mi fa sol la si : le classiche note della prima ottava.
Per riprodurre un re alto, scriviamo re +
Per riprodurre un re basso scriviamo re -
Se si vuole alzare o abbassare ottava, si usa il simbolo “:” seguito da “+” or “-”. Per esempio: dopo “:++” nella sequenza, tutte le note saranno riprodotte due ottave sopra.
Per impostazione predefinita, le note sono riprodotte per la lunghezza di 1. Se si vuole aumentare o diminuire la durata occorre scrivere il numero che corrisponde alla durata delle note. Per esempio: Seq [sol 0.5 la si]. riprodurrà “sol” con una durata di 1 e “la si” con durata 0,5 (il doppio della velocità).

Sequenza, Seq elenco


Pone in memoria la sequenza nell’elenco aggiungendola alle sequenze precedenti.

Suona


Riproduce la sequenza in memoria.

ImpostaStrumento, ImpStr n


Imposta lo strumento identificato da n. L’elenco di tutti gli strumenti disponibili si trova nel nel Menu StrumentiPreferenzeTab Suono.

Strumento


Restituisce il numero che corrisponde allo strumento in uso.

ImpostaIndiceInSequenza, ImpSeq n


Pone il cursore all’indice n nella sequenza attuale in memoria.

IndiceSequenza, IndSeq


Restituisce la posizione del cursore nella sequenza attiva.

CancellaSequenza, CancSeq


Elimina la sequenza attiva in memoria.

Esempio di riproduzione MIDI:
PIC


Codice A.37: Creazione di uno spartito MIDI
Per tabac 
# Crea la sequenza di note 
seq [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 ] 
seq [:+ 1 re 0.5 re do 1 :- si 0.5 la si 1 :+ do re 2 :- la ] 
seq [:+ 1 re 0.5 re do 1 :- si 0.5 la si 1 :+ do re 2 :- la ] 
seq [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 ] 
Fine

Per ascoltare la musica, eseguire il comando: tabac Suona
Un altro esempio mostra una interessante applicazione della primitiva ImpSeq:


Codice A.38: Riproduzione di uno spartito MIDI
CancSeq 
tabac 
ImpSeq 2 
tabac 
Suona

A.15.2 Riprodurre file MP3

Avviamp3 parola1


Legge e riproduce il file mp3 parola1. Il file deve risiedere nella cartella attuale oppure può essere localizzato in rete. Per esempio:
Avviamp3 file.mp3
Avviamp3 http://website.com/file.mp3

Fermamp3


Ferma la riproduzione del file mp3 attuale.

A.16 Interagire con l’utente durante l’esecuzione del programma

A.16.1 Interazione tramite la tastiera

Attualmente il testo può essere accettato dall’utente durante l’esecuzione del programma attraverso tre primitive:

  1. Tasto?
  2. LeggiCarattere
  3. Leggi

Tasto?


Restituisce “vero” o “falso” a seconda che l’utente abbia premuto un tasto dall’avvio del programma LOGO.

LeggiCarattere


E’ opportuno ricordare che LeggiCarattere non ritorna il carattere ma il suo codice unicode, per convertirlo in carattere utilizzare la primitiva Carattere (vedi pagina §). Questi sono il valori per alcuni tasti speciali:






Carattere Codice unicode Carattere Codice unicode




-37 or -226 (NumPad) -38 or -224 (NumPad)
-39 or -227 (NumPad) -40 or -225 (NumPad)
ESC 27 F1 -112
F2 -113
Shift -16 Spazio 32
Ctrl -17 Invio 10





Tabella A.2: Caratteri e rispettivi codici unicode

Se si è insicuri dal valore restituito da un tasto, si può digitare:
Stampa LeggiCarattere. L’interprete aspetterà la pressione di un tasto prima di fornire il valore corrispondente.

Leggi elenco1 arg2


Visualizza una finestra di dialogo il cui titolo è elenco1. L’utente può quindi inserire una risposta in un campo di testo. La risposta sarà salvata nella forma di parola o elenco (se l’utente ha scritto più parole) nella variabile arg2, che sarà assegnata quando il bottone OK viene premuto.

A.16.2 Qualche esempio di utilizzo


Codice A.39: Richiesta di una risposta dall’utente
per vintage 
  Leggi [Che eta hai?] "age 
  AssegnaVar "age :age 
  Se :age<18 [Stampa [Sei minorenne]] 
  Se o :age=18 :age>18 [Stampa [Sei un adulto]] 
  Se :age>99 [Stampa [Rispetto e dovuto!!]] 
fine

Codice A.40: L’utente controlla la tartaruga
per rallye 
  Se Tasto? [ 
    AssegnaVar "car LeggiCarattere 
    Se :car=-37 [RuotaSinistra 90] 
    Se :car=-39 [RuotaDestra 90] 
    Se :car=-38 [Avanti 10] 
    Se :car=-40 [Indietro 10] 
    Se :car=27 [FermaTutto] 
  ] 
fine

A.16.3 Interazione tramite il mouse

Attualmente gli eventi del mouse possono essere accettati dall’utente durante l’esecuzione del programma attraverso tre primitive:

  1. LeggiMouse
  2. PosizioneMouse
  3. Mouse?

LeggiMouse


L’esecuzione del programma viene messa in pausa in attesa di un evento del mouse. Restituisce un numero che rappresenta l’evento avvenuto. I valori sono:

Il bottone 1 è quello di sinistra, il bottone 2 è quello alla sua destra e così via …

PosizioneMouse, PosMouse


Restituisce un elenco contenente la posizione del mouse.

Mouse?


Restituisce “vero” se si tocca il mouse dall’inizio del programma LOGO, “falso” altrimenti.

A.16.4 Qualche esempio di utilizzo


Codice A.41: La tartaruga segue il mouse quando si sposta sullo schermo
Per esempio 
  Se LeggiMouse=0 [ImpPos PosMouse] 
Fine 
RipetiPerSempre [esempio]

Codice A.42: La tartaruga segue il mouse con il tasto premuto
Per esempio2 
  if LeggiMouse=1 [ImpPos PosMouse] 
Fine 
RipetiPerSempre [esempio2]

In questo esempio si creano due bottoni rosa. Se si clicca sul bottone di sinistra viene disegnato un quadrato di lato 40, se si clicca sul bottone di destra viene disegnato un piccolo cerchio. Se si clicca il tasto destro sul bottone destro il programma viene fermato. Il programma si avvia con avvio:

PIC


Codice A.43: Disegno di poligoni con il mouse
per bottone 
  #crea un bottone rettangolare rosa 
  Ripeti 2[Avanti 50 RuotaDestra 90 Avanti 100 RuotaDestra 90] 
  RuotaDestra 45 PennaSu Avanti 10 PennaGiu ImpostaColorePenna [255 153 153] 
  Riempi Indietro 10 RuotaSinistra 45 PennaGiu ImpostaColorePenna 0 
fine 
 
per avvio 
  PulisciSchermo bottone PennaSu ImpostaPosizione [150 0] PennaGiu bottone 
  PennaSu ImpostaPosizione [30 20] PennaGiu Etichetta "quadrato 
  PennaSu ImpostaPosizione [180 20] PennaGiu Etichetta "cerchio 
  PennaSu ImpostaPosizione [0 -100] PennaGiu 
  mouse 
fine 
 
per mouse 
  # assegniamo il valore di LeggiMouse nella variabile ev 
  AssegnaVar "ev LeggiMouse 
  # assegniamo la coordinata x del mouse nella variabile x 
  AssegnaVar "x Elemento 1 PosizioneMouse 
  # assegniamo la coordinata y del mouse nella variabile y 
  AssegnaVar "y Elemento 2 PosizioneMouse 
  # se si clicca sul bottone di sinistra 
  Se :ev=1 & :x>0 & :x<100 & :y>0 & :y<50 [square] 
  # se si clicca sul bottone di destra 
  Se  :x>150 & :x<250 & :y>0 & :y<50 [ 
            Se :ev=1 [Circonferenza2] 
            Se :ev=3 [Ferma] 
  ] 
  mouse 
fine 
 
per Circonferenza2 
  Circonferenza 20 PennaSu  Avanti 40 RuotaDestra 90 PennaGiu 
fine 
 
per square 
  Ripeti 4 [Avanti 40 RuotaDestra 90] RuotaDestra 90 Avanti 40 RuotaSinistra 90 
fine

A.16.5 Componenti grafici

Con XLOGO si possono aggiungere molti componenti grafici nell’area di disegno (bottoni e menu). Tutte le primitive che permettono la manipolazione di queste componenti terminano con il suffisso GUI (per “Graphical User Interface” Interfaccia grafica con l’utente).
L’aggiunta di un componente segue tre passi:

  1. Creazione
  2. Modifica delle proprietà
  3. Visualizzazione sull’area di disegno

Creare un componente

BottoneGUI, BGUI parola1 parola2


Crea un bottone il cui titolo è parola2 ed il cui nome è parola1. Il nome identifica il componente per i successivi passi.

MenuGUI, MGUI parola1 elenco2


Crea un menu combinato il cui nome è parola1 e che contiene gli elementi da elenco2
MenuGUI mioMenu [elemento1 elemento2 elemento3]

Modificare le proprietà del componente

PosizioneGUI, PGUI parola1 elenco2


Posiziona l’elemento grafico parola1 in un punto preciso fornito dalle coordinate in elenco2. Per esempio, volendo posizionare il bottone “b” alle coordinate (20;100), si scriverà: PosizioneGUI "b [20 100]. Se non si specifica una posizione per il componente, verrà posizionato nell’angolo in alto a sinistra dell’area di disegno.

RimuoviGUI, RGUI parola1


Cancella un componente grafico. Per esempio per cancellare il bottone “b”: lRimuoviGUI "b.

AzioneGUI, AGUI parola1 elenco2


Definisci una azione per il componente parola1 quando l’utente interagisce con esso.

Codice A.44: Esempi di AzioneGUI
# la tartaruga avanza di 100 passi se si clicca il bottone "b 
AzioneGUI "b [fd 100 ] 
# Nel menu combinato, ciascun elemento ha la sua azione 
AzioneGUI "m [[Stampa "elemento1]  [Stampa "elemento2] [Stampa "elemento3]]

Modificare le proprietà del componente

DisegnaGUI, DGUI parola1


Visualizza il componente grafico nell’area di disegno. Per esempio per mostrare il bottone “b” DisegnaGUI "b.

A.17 Ora e data

XLOGO ha numerose primitive per la data, l’ora e per generare conteggi inversi.

Aspetta n


Sospende l’esecuzione del programma e quindi la tartaruga per n-
60 secondi. Per esempio per sospendere il programma per 1 secondo: Aspetta 60.

Cronometro n


Inizia un conteggio inverso di n secondi. Il programma può controllare se il conteggio è terminato con FineCronometro?

La differenza tra Aspetta e Cronometro rimane nel fatto che la seconda primitiva non sospende il programma.


Codice A.45: Uso della primitiva cronometro
per orologio 
  Se FineCronometro? [ 
    PulisciSchermo 
    ImpCFont NascondiTartaruga 
    AssegnaVar "heu HMS 
    AssegnaVar "h Primo :heu 
    AssegnaVar "m Elemento 2 :heu 
    Se :m-10<0 [AssegnaVar "m Parola 0 :m] 
    AssegnaVar "s Ultimo :heu 
    Se :s-10<0 [AssegnaVar "s Parola 0 :s] 
    Etichetta Parola Parola Parola Parola :h ": :m ": :s 
    Cronometro 5 
  ] 
fine

FineCronometro?


Restituisce vero se non c’è un conteggio attivo, altrimenti restituisce falso.

Data


Restituisce un elenco contenente tre numeri interi rappresentanti la data di sistema. Il primo intero indica il giorno, il secondo il mese, il terzo l’anno ([giorno mese anno]).

HMS


Restituisce un elenco di tre interi rappresentanti l’ora di sistema. Il primo intero identifica l’ora, il secondo i minuti, il terzo i secondi [ora minuto secondo]

SecondiDaAvvio


Restituisce il tempo passato in secondi da quando XLOGO è stato lanciato.

A.18 Utilizzare XLOGO in rete

A.18.1 Basi delle reti

Introduciamo le basi della comunicazione in rete prima di utilizzare le primitive di XLOGO.


PIC

Figura A.5: Una semplice rete

Due o più computer possono comunicare in rete se entrambi possiedono schede di rete Ethernet. Ciascun computer è identificato da un indirizzo univoco chiamato indirizzo IP. Questo indirizzo IP consiste di 4 numeri interi, ciascuno compreso tra 0 e 255 e separati da punti. Per esempio l’indirizzo IP del primo computer in figura è 192.168.1.1.
Poiché non è facile ricordare questi indirizzi è anche possibile identificare ciascun computer con un nome più semplice. Come possiamo vedere in figura, possiamo comunicare con il computer di destra attraverso il suo indirizzo IP 192.168.1.2 o tramite il suo nome: turtle
Il computer locale sul quale si lavora ha sempre uno stesso indirizzo IP: 127.0.0.1, il suo nome generale è textttlocalhost. Lo vedremo in pratica più oltre.

A.18.2 Primitive per la rete

XLOGO ha quattro primitive che gli consentono di comunicare in rete:

  1. AscoltaTCP
  2. EseguiTCP
  3. FinestraChatTCP
  4. InviaTCP

Nei successivi esempi si assume la configurazione dei due computer nella figura precedente.

AscoltaTCP, ATCP


Questa primitiva è la base di tutta la comunicazione in rete. Non ha bisogno di un argomento. Il computer si dispone in ascolto delle istruzioni spedite da altri computer nella rete.

EseguiTCP, ETCP parola1 elenco2


Questa primitiva permette l’esecuzione di istruzioni da un computer in rete. L’indirizzo IP del computer in rete è fornito in parola1, l’elenco elenco2 contiene le istruzioni da eseguire.
Per esempio: mi trovo sul computer hare, voglio disegnare un quadrato di lato 100 sull’altro computer. Quindi sul computer turtle, devo lanciare la primitiva listentcp. Quindi sul computer hare, scrivo:

Codice A.46: Disegno su un computer in rete
EseguiTCP "192.168.1.2 [ripeti 4[avanti 100 ruotadestra 90]] 
# o 
EseguiTCP "turtle [ripeti 4[avanti 100 ruotadestra 90]]

FinestraChatTCP, FChatTCP parola1 elenco2


Permette una chat tra due computer in rete. Su ciascun computer viene visualizzata una finestra di chat. parola1 è l’indirizzo IP del computer o il suo nome, elenco2 contiene la frase da visualizzare.
Per esempio: hare vuole parlare con turtle.
Per prima cosa turtle esegue AscoltaTCP, in questo modo rimane in attesa di istruzioni da computer in rete. Quindi hare scrive: FinestraChatTCP "192.168.1.2 [ciao turtle].
Le finestre chat compariranno su entrambi i computer, permettendogli di parlare fra di loro.

InviaTCP, ITCP parola1 elenco2


Spedisce dati verso un computer in rete e restituisce la sua risposta. parola1 è l’indirizzo IP del computer o il suo nome, elenco2 contiene i dati da spedire. Quando XLOGO è lanciato sull’altro computer, risponderà OK. E’ possibile comunicare con un robot attraverso la sua interfaccia di rete. La risposta del robot potrebbe quindi variare.
Per esempio: turtle vuole spedire a hare la frase “3.14159 è una approssimazione di pi greco”.
hare esegue AscoltaTCP. turtle scrive: Stampa InviaTCP "hare [3.14159 è una approssimazione di pi greco].

Un piccolo suggerimenti: Apri due volte XLOGO sullo stesso computer.

Puoi muovere la tartaruga nell’altra finestra! Ciò è possibile perché 127.0.0.1 designa l’indirizzo locale, è quindi lo stesso computer …