if
Nella sua forma più semplice, il condizionale if in Scheme valuta un test e, in base al risultato, esegue uno di due possibili blocchi di codice:
(if test-is-true
do-this)- Se il
testè vero (#t), viene eseguito il blocco consequent. Il blocco può restituire un valore o eseguire altre azioni, come assegnare una variabile o stampare output.
Esempio
(if (< 0 1)
(lumi-message "True!"))- In questo caso il
testè(< 0 1)(verifica se 0 è minore di 1). - Poiché il test è vero (
#t), viene eseguito(lumi-message "True!"), che stampa"True!".
Aggiungere else: if-else
Quando if ha un blocco alternativo (caso else), la struttura è:
(if test
do-this
else-do-this)- Se il
testè vero (#t), viene eseguito il consequent. - Se il
testè falso (#f), viene eseguito l’alternative.
(if test
consequent
alternative)Come funziona
Espressione di test:
- Prima viene valutato il
test.
- Prima viene valutato il
Risultato in base al test:
- Se il
testè vero (#t), viene eseguito il consequent. - Se il
testè falso (#f), viene eseguito l’alternative.
- Se il
Entrambi i blocchi possono eseguire qualsiasi operazione Scheme valida, incluso restituire valori, modificare variabili o eseguire procedure.
Esempi
Esempio 1: restituire un valore
(if (< 0 1)
1
0)- Il
testè(< 0 1). - Poiché il test è vero (
#t), viene eseguito il consequent (1) e ne viene restituito il valore.
Risultato: 1
Esempio 2: valutare un blocco begin
Quando servono più azioni, raggrupparle con begin o let.
(if (= 0 1)
(begin
(lumi-message "This won't run")
1)
(begin
(lumi-message "False condition met, calculating...")
(* 3 4)))- Il
testè(= 0 1). - Poiché il test è falso (
#f), viene eseguito l’alternative:- Prima stampa
"False condition met, calculating...". - Poi calcola
(* 3 4)e restituisce12.
- Prima stampa
Risultato: Stampa “False condition met, calculating…” e restituisce 12.
Esempio 3: valutare un’espressione let
Con let è possibile dichiarare variabili locali nel blocco.
(if (= 1 1)
(let (x -1)
(lumi-message "True condition met, calculating...")
(* x 10))
(let (y 4)
(lumi-message "This won't run")
(* 3 y)))- Il
testè(= 1 1). - Poiché il test è vero (
#t), viene eseguito il consequent:- Prima stampa
"True condition met, calculating...". - Poi calcola
(* -1 10)e restituisce-10.
- Prima stampa
Risultato: Stampa “True condition met, calculating…” e restituisce -10.
Riepilogo
- Il condizionale
ifè uno strumento potente in Scheme per valutare test ed eseguire blocchi corrispondenti. - Gestisce sia espressioni semplici sia blocchi complessi che restituiscono valori, modificano variabili o producono effetti collaterali.
- Senza un
elseesplicito,ifesegue il consequent solo se il test è vero; altrimenti l’alternative.