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
1 2 3 4 5 |
if(leftIsWhite) # se a sinistra è bianco { left # girati a sinistra forward(1) # fai un passo } |
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
1 2 3 4 5 |
if(passi <= 5) # se il valore della variabile passi è minore oppure uguale a 5 { left # girati a sinistra forward(1) # fai un passo } |
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 not, and, or.
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
1 |
not frontIsClear |
and, &
Vero se entrambi gli argomenti sono veri.
Esempio: Davanti è libero e a destra è bianco
1 |
frontIsClear and rightIsWhite |
or, |
Vero se almeno uno degli argomenti è vero.
Esempio: Davanti è libero oppure a destra è bianco
1 |
frontIsClear or rightIsWhite |
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
1 2 3 4 |
repeatWhile(not frontIsClear and (leftIsWhite or rightIsWhite)) { forward(1) } |
1 2 3 4 5 |
if(flipCoin() and not rightIsWhite()) { right() backward(1) } |
1 2 3 4 |
if(true and false) { forward(1) } |