Il linguaggio


In ordine alfabetico

and Operatore logico
backward(…)
break Interruzione della ripetizione
coinFlip()
east(…) EST
eatUp() Mangia il faro
end Interruzione del programma
false Costante logica
forward(…)
frontIsBeacon() ?
frontIsBlack() ?
frontIsClear() ?
frontIsObstacle() ?
frontIsWhite() ?
goto(…,…) Porta il robot alla posizione specificata
if(…) {…} Selezione singola
if(…) {…} else {…} Selezione doppia
left()
leftIsBeacon() ?
leftIsBlack() ?
leftIsClear() ?
leftIsObstacle() ?
leftIsWhite() ?
north(…) NORD
not Operatore logico
paintBlack()
paintWhite()
pickUp()
procedure … (…) {…}
putDown()
repeat(…) {…} Ripetizione
repeatWhile(…) {…} Ripetizione condizionata
return Interruzione della procedura
right()
rightIsBlack() ?
rightIsClear() ?
rightIsObstacle() ?
rightIsBeacon() ?
rightIsWhite() ?
stopPainting()
south(…) SUD
west(…) OVEST

Sintassi di base

Le parole riservate del linguaggio sono

and backward break coinFlip east end else false forward frontIsBeacon frontIsBlack frontIsClear frontIsObstacle frontIsWhite if left leftIsBeacon leftIsBlack leftIsClear leftIsObstacle leftIsWhite north not paintBlack paintWhite pickUp procedure putDown repeat repeatWhile return right rightIsBlack rightIsClear rightIsObstacle rightIsBeacon rightIsWhite stopPainting south west.

In caso di amnesia, tramite la voce di menu Edit > Insert... > ... è possibile inserire una qualsiasi delle parole chiave.

Dalla versione 3.0 le parentesi sono facoltative per i comandi senza parametri

I file sorgente sono file di testo con alcune particolarità

  1. L’estensione è .irobo (nelle prime versioni l’estensione era .robo)
  2. I file si trovano nella cartella …scripts/en (quelli in inglese…)

Il testo dopo il segno # sarà trattato come un commento cioè verrà saltato dall’interprete del linguaggio

Se un programma viene scritto per una specifica mappa allora questa può essere caricata automaticamente tramite una direttiva nel file sorgente:

Comandi

Il robot esegue degli ordini con nomi prefissati.
Alcuni ordini prevedono un parametro n, numero di passi

Movimento left Gira a sinistra/destra di 90 gradi
(rispetto alla direzione attuale)
  right
forward(n) Fai n passi avanti/indietro
backward(n)
north(n) Gira verso nord/sud/est/ovest e fai n passi in avanti
(qualunque sia la direzione attuale)
south(n)
east(n)
west(n)
goto(col, riga) Porta il robot alla posizione specificata, senza sbattere…
Disegno paintWhite Appoggia il pennello bianco/nero sul pavimento e comincia a scrivere
paintBlack
stopPainting Alza il pennello e smetti di scrivere
Azioni pickUp Raccogli
Rilascia
Mangia il faro
putDown
eatUp

Funzioni

Il robot prende delle decisioni… dopo aver valutato i valori restituiti da certe funzioni che lo informano sul mondo che lo circonda.

Per esempio: frontIsClear, di fronte la strada è libera?

A sinistra Di fronte A destra CONTROLLO?
leftIsClear frontIsClear rightIsClear Strada libera?
Quante celle?
leftIsBeacon frontIsBeacon rightIsBeacon Un faro?
leftIsBlack frontIsBlack rightIsBlack Colore nero (scuro)?
Quante celle?
leftIsWhite frontIsWhite rightIsWhite Colore bianco (chiaro)?
Quante celle?
leftIsObstacle frontIsObstacle rightIsObstacle Ostacolo?

Casualità

Lancia una moneta, flipCoin, e restituisce il risultato.

Il risultato di flipCoin sarà true/false con la stessa probabilità.
Si utilizza per prendere una decisione casuale.

Cicli

Una sequenza di istruzioni, delimitata da parentesi graffe, può essere eseguita più volte tramite le seguenti strutture di controllo

repeat(n) { … }

Ripeti n volte le istruzioni delimitate dalle parentesi graffe.

Esempio

Disegna un quadrato…

repeat { … }

Ripeti per sempre le istruzioni delimitate dalle parentesi graffe.

Esempio

Vai avanti per sempre

Ma se incontra un ostacolo si ferma…

repeatWhile(…) { … }

Ripeti le istruzioni delimitate dalle parentesi graffe finchè la condizione è vera.
La condizione sarà, per esempio, la chiamata di una delle funzioni che osservano.

Esempio

break

All’interno di un’istruzione repeat(), permette di interrompere l’esecuzione della sequenza.
L’esecuzione riprende con la prima istruzione dopo la parentesi graffa di chiusura del ciclo.

Esempio

end

Provoca l’interruzione dell’esecuzione del programma.

Esempio

Selezioni

Una sequenza di istruzioni, delimitata da parentesi graffe, può essere eseguita o meno tramite le seguenti strutture di controllo

if(…) { … }

Esegui le istruzioni delimitate dalle parentesi graffe se la condizione nelle parentesi tonde è vera.

Esempio

if(…) { … } else { … }

Esegui le istruzioni delimitate dalle parentesi graffe dopo l’if() se la condizione è vera altrimenti esegui le istruzioni delimitate dalle parentesi graffe dopo l’else.

Esempio

Espressioni logiche

Le condizioni nelle istruzioni if() e repeatWhile() sono dette espressioni logiche.

Queste espressioni possono essere vere o false e permettono all’esecutore di decidere qual è la prossima istruzione da eseguire.

Esempio

Anche i confronti tra numeri restituiscono un valore vero o falso

  • <, minore di
  • <=, minore di oppure uguale a
  • >, maggiore di
  • >=, maggiore di oppure uguale a
  • ==, uguale a
  • ~=, non uguale a, diverso da

Esempio

Un’espressione logica può essere una singola funzione di osservazione, un singolo confronto oppure può essere costituita da più funzioni/confronti combinati con gli operatori notandor.
In questo modo si rende più ponderata la decisione di eseguire o meno un blocco di istruzioni.

not, ~

Nega il valore dell’argomento.

Esempio

Davanti non è libero

and, &

Vero se entrambi gli argomenti sono veri.

Esempio

Davanti è libero e a destra è bianco


or, |

Vero se almeno uno degli argomenti è vero.

Esempio

Davanti è libero oppure a destra è bianco

true, false

I valori true e false possono essere usati direttamente nelle espressioni.

Ordine di valutazione

not => and => or

Le parentesi possono alterare l’ordine di valutazione.

Esempio

Ripeti mentre davanti non è libero e inoltre è bianco a sinistra oppure a destra, vai avanti di un passo

Sottoprogrammi

I sottoprogrammi si utilizzano quando

  1. una certa sequenza di istruzioni appare più volte nello stesso programma: la scrivo una sola volta e la chiamo per nome più volte
  2. appare in programmi diversi: la progetto una volta e poi la utilizzo con copia e incolla in altri programmi
  3. per semplificare il codice: suddivido il codice in blocchi logici e li progetto uno alla volta

Il codice del sottoprogramma non viene eseguito automaticamente ma ogni volta che comparirà la sua chiamata.

procedure nome { … }

Definisce un sottoprogramma con un nome a piacere.
La chiamata avviene scrivendo semplicemente il nome dove serve.

Esempio

Come disegnare un rettangolo 3×2

procedure nome(p1, p2, …) { … }

Definisce un sottoprogramma con un nome a piacere.
Il sottoprogramma può avere un certo numero di parametri. Saranno utilizzati come variabili nel blocco successivo di istruzioni.
Si consiglia di utilizzare nomi significativi per i parametri.

Esempio

Come disegnare un rettangolo, date le dimensioni orizzontale e verticale

nome(a1, a2, …)

La chiamata di un sottoprogramma avviene scrivendo il nome seguito dall’elenco degli argomenti, cioè con i particolari valori che saranno utilizzati dal sottoprogramma.

Il numero di argomenti deve corrispondere al numero di parametri dichiarati nella definizione del sottoprogramma.

Esempio

return

Se il sottoprogramma ha raggiunto il suo scopo allora si può decidere di ritornare al punto dove è stata fatta la chiamata e continuare con l’esecuzione delle istruzioni successive.

Si tratta di una scorciatoia che permette di progettare più facilmente una procedura complessa.

Esempio

L’istruzione di ritorno può contenere un valore che verrà restituito al chiamante, la procedura si comporta come una funzione

Ricorsione

Le procedure possono essere definite in funzione di se stesse…

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *