Programmazione Espressioni condizionali e variabili.

Transcript

Programmazione Espressioni condizionali e variabili.
Programmazione
Espressioni condizionali e variabili.
Samuel Rota Bulò
DAIS
Università Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Outline
Espressioni condizionali
Variabili
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Funzione condizionale
Sia A un insieme e B l’insieme dei booleani. La funzione
condizionale if-then-else è una funzione del tipo B × A × A → A
definita nel seguente modo
(
x se b
if-then-else(b, x, y ) =
y altrimenti
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Espressioni condizionali in ML
I
In ML un’espressione condizionale viene scritta nel seguente
modo
if <cond> then <expr1> else <expr2>
dove
I
I
I
<cond> è un’espressione di tipo booleano
<expr1> e <expr2> devono avere lo stesso tipo
L’espressione condizionale assume il valore di <expr1> o
<expr2> se rispettivamente <cond> è vera o falsa
# if 2>1 then 4. else 5.;;
- : float = 4.
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Attenzione agli errori di tipo !
# if 2>1 then 4. else 5;;
^
Error: This expression has type int but an expression
was expected of type float
# if 5+1 then 4. else 5.;;
^^^
Error: This expression has type int but an expression
was expected of type bool
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Esercizi
I
Valutare le seguenti espressioni:
# if 2>1 then 2 else 1/0;;
# if 2>1 then if true<false then 9.
else (+.) 3. 1.
else 3.-.2.;;
# if "abc"<"" then []
else if (2,false)>(3,true) then 1::2::[]
else (@) [1;2;3] [4;5;6];;
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Altro esercizio
I
In ML esiste la funzione max che dati due argomenti dello
stesso tipo ritorna il massimo tra i due.
# max 1 2;;
- : int = 2
I
Assumiamo di avere un’espressione booleana b e due
espressioni dello stesso tipo e1 ed e2.
I
Scrivere l’equivalente di
if b then e1 else e2
utilizzando operazioni su ennuple e la funzione max.
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Outline
Espressioni condizionali
Variabili
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Variabili globali
I
I
I
In ML le variabili sono dei nomi associati a dei valori (che
possono essere anche funzioni).
Introduciamo definizioni di variabile globale con
let <id> = <expr>
I nomi delle variabili devono:
1. iniziare con una lettera minuscola o
2. contenere solo lettere, numeri, o
I
Le variabili globali possono essere utilizzate allinterno di
qualsiasi espressione.
# let pi=3.1415927;;
val pi : float = 3.1415927
# let raggio=1.;;
val raggio : float = 1.
# let circonferenza=2.*.pi*.raggio;;
val circonferenza : float = 6.2831854
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Variabili locali
I
Introduciamo definizioni di variabile locale con
let <id> = <expr1> in <expr2>
I
<expr2> è detto corpo del let.
I
L’esistenza delle variabili locali è limitata al corpo del let.
# let a=1 in a+2;;
- : int = 3
# a;; (* a non esiste più *)
^
Error: Unbound value a
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Attenzione !
I
Le definizioni di variabile globale NON sono espressioni.
# 1+ let a=1;;
^^
Error: Syntax error
I
Le definizioni di variabile locale sono espressioni.
# 1+ let a=1 in a;;
- : int = 2
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Definizioni multiple di variabili
I
Possiamo definire più variabili globali con un solo let nel
seguente modo
let
and
and
and
I
<id1>=<expr1>
<id2>=<expr2>
...
<id n>=<expr n>
Lo stesso vale per le definizioni di variabile locale:
let <id1>=<expr1>
and <id2>=<expr2>
and ...
and <id n>=<expr n>
in <expr n+1>
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Definizioni di variabili innestate
I
Siccome le definizioni di variabile locale sono espressioni, esse
possono essere innestate in altre definizioni di variabile:
#
#
-
let a=let b=2. in b**2. in a*.3.;;
: float = 12.
let a=1. in let b=2. in let c=3. in a+.b+.c;;
: float = 6.
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Mascheramento di variabili
I
I
Cosa succede se definiamo più volte una variabile con lo stesso
nome ?
La più recente definizione maschera le precedenti finchè non
cessa di esistere.
# let x=1;; (* x esiste globalmente *)
val x : int = 1
# let x=x+1 in x+1;; (* x mascherata localmente *)
- : int = 3
# x;; (* x globale torna visibile *)
- : int = 1
# let x=2;; (* x viene ridefinita globalemente *)
val x : int = 2
# x;;
- : int = 2
# let x=1 in let x=x+x in let x=x+x in x+x;;
- : int = 8
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.
Espressioni condizionali
Variabili
Esercizi
I
Utilizzando la definizione di variabile globale, creare una
funzione successore che dato x ∈ Z ritorna x + 1.
Programmazione Espressioni condizionali e variabili.
DAISUniversità Ca’ Foscari di Venezia.