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.