La tartaruga è comandata tramite comandi interni chiamati ‘primitive’. Le seguenti sezioni descrivono le primitive
di XLOGO.
Queste prime primitive governano il movimento della tartaruga.
Sposta la tartaruga in avanti di n passi, nella direzione in cui si trova.
Sposta la tartaruga indietro di n passi, nella direzione in cui si trova.
Ruota la tartaruga di n gradi verso la sua destra (rispetto la direzione in cui si trova).
Ruota la tartaruga di n gradi verso la sua sinistra (rispetto la direzione in cui si trova).
Disegna una circonferenza di raggio R avente come centro la tartaruga.
Disegna una arco di circonferenza di raggio R attorno alla tartaruga. L’arco è viene tracciato dall’angolo ang1
all’angolo ang2.
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]
Sposta la tartaruga orizzontalmente fino al punto x sull’asse delle ascisse (X).
Sposta la tartaruga verticalmente fino al punto y sull’asse delle ordinate (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.
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.
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.
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?
Rende visibile la tartaruga sullo schermo.
Rende la tartaruga invisibile sullo schermo.
Svuota l’area di disegno.
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:
- Colore della penna: nero
- Forma della penna: quadrata
- Qualità del tratto: normale
- Colore dello schermo: bianco
- Dimensioni dello schermo: 1000x1000
- Modalità animazione: disabilitata
- Font del testo e della grafica: Dialog 12 punti
- Numero tartarughe ammesse: 16
- Modalità traccia: disabilitata
Quando la penna è abbassata la tartaruga traccia il percorso che compie mentre si sposta.
Quando la penna è alzata la tartaruga si sposta senza tracciare il proprio percorso.
La tartaruga cancella qualsiasi segno incontro al proprio passaggio.
Abbassa la penna e pone la tartaruga in modalità inversa.
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.
Restituisce la posizione attuale della tartaruga.
Esempio: Pos ritorna [10 -100]
Restituisce la coordinata X della posizione della tartaruga.
Restituisce la coordinata Y della posizione della tartaruga.
Restituisce la coordinata Z della posizione della tartaruga (Disponibile solamente nella modalità 3D).
Restituisce la direzione in gradi della tartaruga (cfr. ImpostaDirezione)
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.
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.
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.
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.
Si permette alla tartaruga di muoversi fuori dalla area di disegno (senza disegnarci, ovviamente).
Si permette alla tartaruga di lasciare l’area di disegno e riapparire dal lato opposto!
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.
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
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).
Restituisce lo spessore nella penna della tartaruga in punti (o passi).
Imposta la forma della penna, quadrata o rotonda:
Restituisce la forma della penna.
ImpQualitaDisegno, ImpQD 0-1-2 |
|
Imposta la qualità del disegno :
- 0→normale.
- 1→alta.
- 2→bassa.
Restituisce la qualità del disegno.
- 0→normale.
- 1→alta.
- 2→bassa.
ImpDimensioneSchermo elenco |
|
Imposta la dimensione dell’area di disegno ai valori x e y definiti in elenco. ImpDimensioneSchermo [1000
1000]
Restituisce un elenco di due numeri con la dimensioni dell’area di disegno.
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).
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.
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 Strumenti→Preferenze.
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.
- Il primo numero si riferisce all’allineamento orizzontale:
- 0: allineamento a sinistra
- 1: allineamento al centro
- 2: allineamento a destra
- Il secondo numero si riferisce all’allineamento verticale:
- 0: allineamento in basso
- 1: allineamento al centro
- 2: allineamento in alto
Tutti i possibili casi che si possono verificare sono di seguito elencati. ImpCFont 50 Etichetta XLogo
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.
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.
Restituisce il rapporto attuale tra l’area di disegno e l’area con lo storico dei comandi.
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.
Restituisce il colore della griglia attuale.
Restituisce vero se la griglia è disegnata, altrimenti restituisce falso.
Disegna gli assi orizzontale e verticale. La distanza tra due divisioni è n passi.
Disegna l’asse orizzontale. La distanza tra due divisioni è n passi.
Disegna l’asse verticale. La distanza tra due divisioni è n passi.
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.
Restituisce il colore attuale degli assi.
Restituisce vero se l’asse orizzontale è disegnato, altrimenti restituisce falso.
Restituisce vero se l’asse verticale è disegnato, altrimenti restituisce falso.
Ingrandisce l’area di disegno di un fattore a che rappresenta la scala rispetto alle dimensioni originali dell’immagine
definite nel pannello delle preferenze.
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.
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.
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”.
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] | |
|
|
|
|
|
|
1 | Rosso | [255 0 0] | |
|
|
|
|
|
|
2 | Verde | [0 255 0] | |
|
|
|
|
|
|
3 | Giallo | [255 255 0] | |
|
|
|
|
|
|
4 | Blu | [0 0 255] | |
|
|
|
|
|
|
5 | Magenta | [255 0 255] | |
|
|
|
|
|
|
6 | Ciano | [0 255 255] | |
|
|
|
|
|
|
7 | Bianco | [255 255 255] | |
|
|
|
|
|
|
8 | Grigio | [128 128 128] | |
|
|
|
|
|
|
9 | GrigioChiaro | [192 192 192] | |
|
|
|
|
|
|
10 | RossoScuro | [128 0 0] | |
|
|
|
|
|
|
11 | GrigioScuro | [0 128 0] | |
|
|
|
|
|
|
12 | BluScuro | [0 0 128] | |
|
|
|
|
|
|
13 | Arancio | [255 200 0] | |
|
|
|
|
|
|
14 | Rosa | [255 175 175] | |
|
|
|
|
|
|
15 | Violetto | [128 0 255] | |
|
|
|
|
|
|
16 | Marrone | [153 102 0] | |
|
|
|
|
|
|
|
|
|
|
|
Codice A.1: Tre istruzioni identiche per impostare il colore dello
schermo
ImpCS Arancio ImpCS 13 ImpCS [255 200 0]
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.
La tartaruga entra nella modalità Animazione. Da questo momento non verrà disegnato niente sullo schermo se non
quando si utilizza la primitiva Aggiorna.
La tartaruga esce dalla modalità Animazione.
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à.
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
Svuota l’area dello storico dei comandi.
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
Come la primitiva Stampa scrive arg1 nell’area dello storico dei comandi ma senza andare a capo.
Imposta il corpo del font nell’area dello storico dei comandi. Disponibile solo per la primitiva Stampa
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.
.
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 Menu→Strumenti→Preferenze→Tab
Font.
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.
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
Restituisce un elenco contenente i diversi stili utilizzati per la primitiva Stampa.
Addiziona i due numeri x e y e ne restituisce il risultato.
Esempio: Somma 40 60 restituisce 100
Restituisce x - y.
Esempio: Differenza 100 20 restituisce 80
Restituisce il negativo di x.
Esempio: Meno 5 restituisce -5. Leggere la nota alla fine del paragrafo.
Restituisce il risultato della moltiplicazione di x per y.
Restituisce il risultato della divisione di x per y
Esempio: Div 3 6 restituisce 0.5
Restituisce il quoziente della divisione di x per y
Quoziente 15 6 restituisce 2
Restituisce il resto della divisione di x per 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 |
|
|
|
|
|
Restituisce il più vicino numero intero a x.
|
|
Istruzione | Risultato |
|
|
Arrotonda 8.9 | 9 |
|
|
Arrotonda 6.8 | 7 |
|
|
Arrotonda 6.2 | 6 |
|
|
|
Restituisce la parte intera del numero x.
|
|
Istruzione | Risultato |
|
|
Intero 8.9 | 8 |
|
|
Intero 6.8 | 6 |
|
|
Intero 6.2 | 6 |
|
|
|
Restituisce x elevato alla potenza di n.
Esempio: Potenza 3 2 restituisce 9
Restituisce la radice quadrata di x.
Restituisce il logaritmo naturale (a base e) di x.
Restituisce il valore della base del logaritmo naturale (e), elevato alla potenza dell’esponente x.
Restituisce il logaritmo a base 10 di x.
Restituisce il seno di x (x è espresso in gradi sessagesimali).
Restituisce il coseno di x (x è espresso in gradi sessagesimali).
Restituisce la tangente di x (x è espresso in gradi sessagesimali).
Restituisce l’angolo sessagesimale (0-180∘) il cui coseno è x.
Restituisce l’angolo sessagesimale il cui seno è x.
Restituisce l’angolo sessagesimale la cui tangente è x.
Restituisce il numero di pi greco (3.141592653589793).
Restituisce un numero intero compreso tra 0 e n - 1.
Restituisce un numero casuale compreso tra 0 e 1.
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:
- 16 decimali è l’impostazione predefinita.
- Se n è negativo, viene reimpostato il valore predefinito.
- Se n è uguale a 0 tutti i numeri sono arrotondati all’unità.
Questa primitiva è utile nel calcolo ad alta precisione. Confronta l’esempio con il numero pi greco a pagina
.
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.
Restituisce vero se b1 o b2 sono veri, altrimenti restituisce falso.
Restituisce vero se b1 e b2 sono veri, altrimenti restituisce falso.
Restituisce la negazione di b1.
- Se b1 è vero, restituisce false.
- Se b1 è falso, restituisce vero.
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.
Restituisce una parola concatenando arg1 e arg2.
Restituisce un elenco composto da arg1 e 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.
Inverte l’ordine degli elementi in elenco.
Restituisce un elemento casuale se arg1 è un elenco o una lettera casuale se arg1 è una parola.
Restituisce un elenco da elenco1 dal quale l’elemento arg1, se presente, è rimosso.
Restituisce la lettera n-esima se arg2 è una parola o l’elemento n-esimo se arg2 è un elenco.
Restituisce una parola privata dell’ultima lettera se arg1 è una parola o un elenco privato dell’ultimo elemento se
arg1 è un elenco.
Restituisce una parola privata della prima lettera se arg1 è una parola o un elenco privato del primo elemento se
arg1 è un elenco.
Restituisce una parola costituita dall’ultima lettera se arg1 è una parola o l’ultimo elemento se arg1 è un
elenco.
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
Restituisce il numero di lettere se arg1 è una parola o il numero di elementi se arg1 è un elenco.
Restituisce il valore unicode del carattere carattere1.
Restituisce il carattere il cui valore unicode è n.
|
|
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 |
|
|
|
Un booleano è una primitiva che restituisce la parola "vero o la parole "falso. Le primitive booleane terminano con il
punto interrogativo.
Restituisce "vero.
Restituisce "falso.
Restituisce vero se arg1 è una parola, falso altrimenti.
Restituisce vero se arg1 è un numero, falso altrimenti.
Restituisce vero se arg1 è un numero intero, falso altrimenti.
Restituisce vero se arg1 è un elenco, falso altrimenti.
Restituisce vero se arg1 è un elenco vuoto o una parola vuota, falso altrimenti.
Restituisce vero se arg1 e arg2 sono uguali, falso altrimenti.
Restituisce vero se parola2 si trova prima di word2 nell’ordine alfabetico, falso altrimenti.
Restituisce vero se arg1 è un elemento dell’elenco arg2 o se arg1 è una lettera della parola arg2.
Restituisce una parola o un elenco a partire dalla prima occorrenza di arg1 in arg2.
- Se arg2 è una parola restituisce la parte finale della parola a cominciare dalla prima occorrenza di arg1,
falso se arg1 non è contenuto in arg2.
- Se arg2 è un elenco restituisce un elenco contenente tutti gli elementi dalla prima occorrenza di arg1
in arg2, falso se non esiste occorrenza.
|
|
Istruzione | Risultato |
|
|
Stampa Membro 3 [1 2 3 4] | [3 4] |
|
|
Stampa Membro "o "cocoa | "ocoa |
|
|
|
Restituisce la parola vero se la penna è poggiata sull’area di disegno, falso altrimenti.
Restituisce vero se la tartaruga è visibile, falso altrimenti
Restituisce vero se parola1 è una primitiva XLOGO, falso altrimenti.
Restituisce vero se parola1 è una procedura definita nel programma logo, falso altrimenti.
Restituisce vero se parola1 è una variabile, falso altrimenti.
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:
- Se 1+2=3[Stampa "vero][Stampa "falso]
- Se (Primo "XLOGO)=Y [Av 100 DX 90] [Stampa [ XLOGO comincia con una X!] ]
- Se (3*4)=6+6 [Stampa 12]
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
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.
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!
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
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:
- il nome della variabile
- il valore di partenza dell’intervallo
- il valore terminale dell’intervallo
- 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
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]
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
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!
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]
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]
L’area di lavoro contiene tutti gli elementi definiti dall’utente:
- Le procedure
- Le variabili
- Gli elenchi di proprietà
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
- nome_della_procedura è il nome scelto per identificare la procedura.
- :v1 :v2 :v3 rappresentano i parametri che la procedura utilizzerà al suo interno (variabili locali), il loro
contenuto è determinato al momento di invocare la procedura stessa.
- [:v4 ... ], [:v5 ...] sono variabili opzionali che si possono aggiungere (leggi più sotto per spiegazioni
più dettagliate).
- Corpo_della_procedura rappresenta l’elenco dei comandi da eseguire quando la procedura viene
invocata.
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:
- Il primo elenco contiene tutti i parametri ed i parametri opzionali.
- I successivi elenchi rappresentano ciascuno una linea della procedura.
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.
Restituisce tutte le informazioni sula procedura chiamata parola1. Restituisce un elenco che contiene numerosi
elenchi.
- Il primo elenco contiene tutte i parametri e parametri opzionali.
- Quindi ciascun elenco rappresenta una linea della procedura.
Questa primitiva è ovviamente associata a Definisci.
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.
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)
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.
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
Le variabili sono come dei contenitori che possono essere riempiti di contenuti come parole, caratteri, numeri. Ci
sono due tipi di variabili:
- Globali: le variabili globali sono accessibili da qualunque posizione nel programma.
- Locali: le variabili locali sono accessibili nella procedura dove sono state definite. In questa versione di
LOGO, le variabili locali non sono accessibili alle sotto-procedure. Alla fine della procedura le variabili
locali sono eliminate.
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.
Le variabili globali si creano e ne viene assegnato il contenuto con la primitiva AssegnaVar.
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
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
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.
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.
Restituisce il valore contenuto nella variabile parola1. ValoreVar "a è simile a :a
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 l’elenco 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
Cancella tutte le variabili, elenchi proprietà e procedure attualmente in funzione.
Chiude XLOGO.
Enumera tutte tutte le primitive definite nel linguaggio attuale.
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à.
Esegue l’elenco di istruzioni contenute in 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.
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
## Nell’editor 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.
Restituisce la cartella attuale. La cartella preimpostata è quella dell’utente, cioè /home/login per utenti Linux,
C:\WINDOWS per utenti Windows.
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.
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.
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.
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
Elenca i vari flussi aperti con i loro 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.
Chiude il flusso identificato da 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 l’altra 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
Apre l’editor con tutte le procedure specificate nell’elenco arg1 o nella parola arg1.
Apre l’editor con tutte le procedure attualmente definite.
Tre primitive permettono di colorare una figura. La primitiva Riempi, RiempiZona e RiempiPoligono.
.
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:
- La penna deve essere abbassata (PG).
- 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:
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.
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).
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
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.
- Un primo esempio per riempire un quadrato:
PulisciSchermo RiempiPoligono [Ripeti 4 [Avanti 100 RuotaDestra 90]]
- Un secondo esempio che disegna e riempie una stella a cinque punte:
Ripeti 5 [Av 100 RiempiPoligono [In 100 DX 144 Av 100 ]In 100 SX 72]
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.
Interrompe l’esecuzione di una procedura o di un ciclo Ripeti o Mentre a seconda di dove lo si include.
Il programma esce da tutte le procedure e si interrompe.
Come Ferma interrompe una procedura ma, a differenza di questo, permette di restituire un valore.
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 Strumenti→Preferenze.
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.
Restituisce il numero della tartaruga attiva.
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.
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!
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:
Alcune primitive permettono di impostare la posizione della cinepresa. Lo schermo di proiezione è posto a metà della
distanza dalla cinepresa.
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:
- Rollio: L’angolo della tartaruga attorno all’asse (Oy)
- Beccheggio: L’angolo della tartaruga attorno all’asse (Ox)
- Direzione: L’angolo della tartaruga attorno all’asse (Oz)
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:
Rollio
Beccheggio
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.
La tartaruga ruota di n gradi alla destra attorno al suo asse longitudinale.
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]
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
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 | | |
|
|
|
|
|
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
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.
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:
Se si inverte l’ordine delle istruzioni, l’orientamento finale sarà diverso!
La tartaruga ruota attorno al suo asse longitudinale fino all’angolo fornito in argomento
Restituisce il valore corrente di rollio.
ImpostaBeccheggio, ImpBec n |
|
La tartaruga ruota attorno al suo asse trasversale fino all’angolo fornito in argomento.
Restituisce il valore corrente di beccheggio.
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:
I successivi movimenti della tartaruga sono salvati per creare un poligono.
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.
I successivi movimenti della tartaruga sono salvati per creare una linea.
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.
I successivi movimenti della tartaruga sono salvati per creare un set di punti.
Finalizza il set di punti.
Ogni volta che si scrive del testo nell’area di disegno con la primitiva Etichetta, esso verrà salvato e quindi
visualizzata dal visualizzatore 3D.
Fine della registrazione del testo.
Parte il visualizzatore 3D, tutti gli oggetti salvati sono disegnati in questa nuova finestra. Si ha il controllo della
scena della cinepresa:
- Si può ruotare la scena cliccando il testo sinistro del mouse.
- Si può traslare la scena cliccando il tasto destra del mouse.
- Si può ingrandire la scena con la rotella del mouse.
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:
Se sostituiamo nella procedura quadrato, InizioPoligono con InizioLinea e FinePoligono con FineLinea
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.
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à:
Sono disponibili svariati tipi di illuminazione:
- Illuminazione di ambiente: è una luce uniforme, è possibile specificarne il colore.
- Illuminazione unidirezionale: si diffonde lungo una direzione costante. E’ molto simile alla illuminazione
puntuale quando la sorgente di luce è molto lontana dall’osservatore, come nel caso del sole, per esempio.
- Illuminazione puntiforme: la luce ha una posizione puntiforme, simile alle luci frontali.
- Illuminazione spot: è una luce puntiforme ma la luce è visualizzata come un cono di luce. Occorre
specificare un valore angolare per il cono stesso.
La cosa migliore è giocare con le illuminazioni per capire come funzionano!
Si può aggiungere un effetto di opacità alla scena 3D cliccando sul bottone nebbia nella scena 3D:
Sono disponibili due tipi di nebbia:
- Nebbia progressiva: l’opacità della nebbia è progressiva, occorre specificare due parametri:
- La distanza alla quale la nebbia inizia.
- La distanza alla quale l’opacità è completa.
- Nebbia uniforme: questa nebbia è uniforme in tutta la scena. Occorre specificare la densità della
nebbia.
Esempio con nebbia progressiva:
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à).
Pone in memoria la sequenza nell’elenco aggiungendola alle sequenze precedenti.
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
Strumenti→Preferenze→Tab Suono.
Restituisce il numero che corrisponde allo strumento in uso.
ImpostaIndiceInSequenza, ImpSeq n |
|
Pone il cursore all’indice n nella sequenza attuale in memoria.
Restituisce la posizione del cursore nella sequenza attiva.
CancellaSequenza, CancSeq |
|
Elimina la sequenza attiva in memoria.
Esempio di riproduzione MIDI:
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
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
Ferma la riproduzione del file mp3 attuale.
Attualmente il testo può essere accettato dall’utente durante l’esecuzione del programma attraverso tre
primitive:
- Tasto?
- LeggiCarattere
- Leggi
Restituisce “vero” o “falso” a seconda che l’utente abbia premuto un tasto dall’avvio del programma
LOGO.
- Se Tasto? è falso il programma viene messo in pausa fino a che l’utente preme un tasto.
- Se Tasto? è vero restituisce il codice unicode dell’ultimo tasto che è stato premuto.
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.
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.
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
Attualmente gli eventi del mouse possono essere accettati dall’utente durante l’esecuzione del programma attraverso
tre primitive:
- LeggiMouse
- PosizioneMouse
- Mouse?
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:
- 0→Il mouse è stato mosso.
- 1→Il bottone 1 è stato premuto.
- 2→Il bottone 2 è stato premuto.
Il bottone 1 è quello di sinistra, il bottone 2 è quello alla sua destra e così via …
Restituisce un elenco contenente la posizione del mouse.
Restituisce “vero” se si tocca il mouse dall’inizio del programma LOGO, “falso” altrimenti.
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:
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
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:
- Creazione
- Modifica delle proprietà
- Visualizzazione sull’area di disegno
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]
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.
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]]
Visualizza il componente grafico nell’area di disegno. Per esempio per mostrare il bottone “b” DisegnaGUI "b.
XLOGO ha numerose primitive per la data, l’ora e per generare conteggi inversi.
Sospende l’esecuzione del programma e quindi la tartaruga per secondi. Per esempio per sospendere il programma
per 1 secondo: Aspetta 60.
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
Restituisce vero se non c’è un conteggio attivo, altrimenti restituisce falso.
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]).
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]
Restituisce il tempo passato in secondi da quando XLOGO è stato lanciato.
Introduciamo le basi della comunicazione in rete prima di utilizzare le primitive di XLOGO.
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.
XLOGO ha quattro primitive che gli consentono di comunicare in rete:
- AscoltaTCP
- EseguiTCP
- FinestraChatTCP
- InviaTCP
Nei successivi esempi si assume la configurazione dei due computer nella figura precedente.
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.
- Nella prima finestra, esegui AscoltaTCP.
- Nella seconda finestra, scrivi EseguiTCP "127.0.0.1 [avanti 100 ruotadestra 90]
Puoi muovere la tartaruga nell’altra finestra! Ciò è possibile perché 127.0.0.1 designa l’indirizzo locale, è quindi lo stesso
computer …