Scheme – Lezione 3 – Condizioni

BivioCome in ogni linguaggio di programmazione, una delle cose essenziali per scrivere un qualunque programma è la  gestione delle condizioni. Una condizione consiste, come penso sappiate, nell’eseguire un blocco di comandi a seconda se sia rispettata o meno una data condizione.

In Scheme la gestione delle condizioni è molto completa. Iniziamo quindi a vedere uno dei costrutti più famosi anche se in Scheme non viene molto usato: l’if.

IF


1
2
3
(if condizione
    espressione_nel_caso_la_condizione_sia_vera
    eventuale_espressione_nel_caso_la_condizione_sia_falsa)

Questa è la struttura dell’if. Viene valutata condizione e a seconda se sia vera o falsa viene eseguito rispettivamente il primo o il secondo blocco di espressioni. Guardiamo un piccolo esempio:


1
2
3
4
5
6
7
; TESTIF: Verifica se A è uguale a Zero.
(define (testif a)
 (if (= a 0) (display "Il valore inserito è uguale a zero.")
         (display "Il valore inserito NON è uguale a zero.")
 )
 (newline)
)

Questa funzione non fa altro che dire se il valore passato per parametro è zero oppure no. Potete subito constatare che questo costrutto è del tutto simile agli if presenti negli altri linguaggi.

COND

COND è il costrutto condizionale più utilizzato a causa della sua versatilità. Esso è infatti in grado di simulare abilmente sia un IF sia un CASE. Vediamo come è strutturato.


1
2
3
4
5
(cond
(prima_condizione espressione)
(seconda_condizione espressione)
...
(else espressione))

Ad ogni sua applicazione vengono valutate le condizioni a partire dalla prima fino all’ultima e viene eseguito il blocco di istruzioni corrispondente alla condizione vera. Se nessuna condizione è vera viene eseguito il ramo else. Vediamo un esempio:


1
2
3
4
5
6
7
8
; TESTCOND: Verifica se B è uguale a 0 o a 1.
(define (testcond b)
    (cond ((= b 0) (display "B = 0"))
        ((= b 1) (display "B = 1"))
        (else (display "NONE"))
    )
    (newline)
)

Questa funzione verifica se il parametro è 0 oppure 1 e in caso contrario risponde con NONE.

CASE

Questo è l’ultimo costrutto decisionale in Scheme. Si comporta in modo molto simile allo switch…case presente in molti altri linguaggi.


1
2
3
4
5
(case espressione_che_viene_valutata
   ((val1) espressione)
   ((val2) espressione)
   ...
   (else espressione))

Viene innanzitutto valutata l’espressione. Dopodichè il valore risultante viene confrontato con la lista di valori val1, se il valore è contenuto in val1 viene eseguita l’espressione corrispondente altrimenti si passa a val2. Così via fino a else che viene eseguita in ogni caso.


1
2
3
4
5
6
7
8
9
; TESTCASE: Verifica se C è pari o dispari compreso fra 0 e 10.
(define (testcase c)
 (case c
     ((1 3 5 7 9) (display "C = DISPARI"))
     ((2 4 6 8 10) (display "C = PARI"))
     (else (display "NONE"))
 )
 (newline)
)

RICAPITOLANDO:

  • IF esegue un espressione se la condizione è vera, ne esegue un altra se è falsa.
  • COND esegue l’espressione corrispondente alla condizione vera o a else se nessuna è vera.
  • CASE calcola un espressione ed esegue i comandi associati alla lista che contiene tale valore.

Comments are closed.