Proposizioni logiche
Valori booleani
In Haskell le costanti di verità — detta anche valori booleani —
sono rappresentate da True
(vero) e False
(falso). Si possono
usare gli operatori logici di congiunzione &&
, disgiunzione ||
e
negazione not
. Quest’ultimo è una funzione e, in quanto tale, va
applicata seguendo le convenzioni standard dell’applicazione
funzionale.
Come in altri linguaggi di programmazione, gli operatori di congiunzione e disgiunzione sono cortocircuitati, ovvero il secondo operando viene valutato solo se necessario.
Uguaglianza, disuguaglianza e relazioni d’ordine
Gli operatori di confronto sono essenzialmente gli stessi di C e
Java, con l’unica differenza che l’operatore di disuguaglianza è
/=
invece di !=
.
Espressioni condizionali
Le espressioni logiche possono essere usate per rendere la valutazione di altre espressioni dipendente da condizioni. Una espressione condizionale ha la forma
dove E1
è un’espressione logica ed E2
ed E3
sono altre
espressioni. Il valore dell’intera espressione dipende da quello di
E1
. Se questo è True
, allora l’intera espressione ha valore
E2
. Se questo è False
, allora l’intera espressione ha valore
E3
. Ad esempio, la funzione assoluto
che calcola il valore
assoluto del suo argomento può essere realizzata nel modo seguente:
Occorre sottolineare che l’espressione condizionale if-then-else
può essere usata ovunque è attesa un’espressione. Per esempio, le
seguenti sono espressioni valide
Affinché un’espressione della forma if E1 then E2 else E3
sia
corretta, è necessario che E1
sia un’espressione logica – ovvero
il cui valore sia di tipo Bool
– e che E2
ed E3
producano
valori dello stesso tipo. Le seguenti espressioni sono errate:
Non è possibile omettere il ramo else
di un’espressione
condizionale, in quanto deve essere sempre specificato qual è il
valore prodotto dall’espressione a prescindere dal valore della
condizione. L’espressione condizionale if E1 then E2 else E3
è
analoga all’espressione ternaria E1 ? E2 : E3
disponibile in
linguaggi come C e Java.
Esercizi
- Scrivere un’espressione logica per calcolare il valore della relazione 1 ≤ 2 ≤ 3.
- Scrivere un’espressione per rappresentare la condizione “1 minore
o uguale di 0 oppure 0 minore o uguale di 1”, il cui valore deve
essere
True
. - Concepire una espressione logica per appurare che
&&
è davvero cortocircuitato. Suggerimento: individuare una espressione che, se valutata, genera un errore (es. una divisione per zero) e usare tale espressione in una condizione formulata usando&&
e||
. - Ripetere l’esercizio precedente con l’operatore
||
. - Esprimere le espressioni
E1 && E2
edE1 || E2
come espressioni condizionali, senza fare uso di operatori.