1/9 Programmazione Funzionale Esercizio sulle variabili locali Davide Mottin - Themis Palpanas March 12, 2014
OCaml Funzioni preparatorie Sommario 2/9
Funzioni preparatorie Costruire una funzione val even : int -> bool = <fun> che restituisca vero se un numero è pari, falso altrimenti. Creare una funzione odd che calcoli l opposto di even. OCaml 3/9
Funzioni preparatorie Costruire una funzione val even : int -> bool = <fun> che restituisca vero se un numero è pari, falso altrimenti. let even n = if n mod 2 = 0 then true else false;; Creare una funzione odd che calcoli l opposto di even. let odd n = not (even n);; OCaml 3/9
Un esercizio più complesso Costruire una funzione che stampi Pari e divisibile per 3 se un numero in input è pari e divisibile per tre, altrimenti Pari ma non divisibile per 3 oppure Dispari e divisibile per 3 e Dispari ma non divisibile per 3. Cercare di utilizzare, ove possibile, dichiarazioni locali. OCaml 4/9
( P r i n t whether a number i s d i v i s i b l e by 2 and by 3 ) l e t p r i n t d i v i s i b i l i t y n = i f even n then l e t out = P a r i i n i f n mod 3 = 0 then p r i n t s t r i n g ( out ˆ e d i v i s i b i l e per 3 ) e l s e p r i n t s t r i n g ( out ˆ ma non d i v i s i b i l e per 3 ) e l s e l e t out = D i s p a r i i n i f n mod 3 = 0 then p r i n t s t r i n g ( out ˆ e d i v i s i b i l e per 3 ) e l s e p r i n t s t r i n g ( out ˆ ma non d i v i s i b i l e per 3 ) ; OCaml 5/9
Esercizio Che tipo ha la funzione seguente e a cosa serve? l e t a p p l y f ( n,m) = ( f n m) ; ; OCaml 6/9
Esercizio Che tipo ha la funzione seguente e a cosa serve? l e t a p p l y f ( n,m) = ( f n m) ; ;. (α β γ) α β γ Sapete fornire una possibile applicazione di questa funzione? OCaml 6/9
Esercizio Che tipo ha la funzione seguente e a cosa serve? l e t a p p l y f ( n,m) = ( f n m) ; ;. (α β γ) α β γ Sapete fornire una possibile applicazione di questa funzione? (possibile). apply (fun x y -> sqrt (x**2.0 +. y**2.0)) (3.,4.);; OCaml 6/9
Esercizio Costruire una funzione conditional apply che, preso in input due funzioni f e g ed un elemento x restituisca g applicata ad x se f (x) restituisce true e x altrimenti. Ragionare inoltre sul tipo della funzione scritta. OCaml 7/9
Esercizio Costruire una funzione conditional apply che, preso in input due funzioni f e g ed un elemento x restituisca g applicata ad x se f (x) restituisce true e x altrimenti. Ragionare inoltre sul tipo della funzione scritta. l e t c o n d i t i o n a l a p p l y f g x = i f f x then g x e l s e x ; ; Qual è il tipo? OCaml 7/9
Esercizio Costruire una funzione conditional apply che, preso in input due funzioni f e g ed un elemento x restituisca g applicata ad x se f (x) restituisce true e x altrimenti. Ragionare inoltre sul tipo della funzione scritta. l e t c o n d i t i o n a l a p p l y f g x = i f f x then g x e l s e x ; ; Qual è il tipo? Esercizio. Costruire una funzione to odd che preso in input un valore se è pari restituisce il suo successore, altrimenti restituisce lo stesso valore. OCaml 7/9
Esercizio Costruire una funzione conditional apply che, preso in input due funzioni f e g ed un elemento x restituisca g applicata ad x se f (x) restituisce true e x altrimenti. Ragionare inoltre sul tipo della funzione scritta. l e t c o n d i t i o n a l a p p l y f g x = i f f x then g x e l s e x ; ; Qual è il tipo? Esercizio. Costruire una funzione to odd che preso in input un valore se è pari restituisce il suo successore, altrimenti restituisce lo stesso valore. (possibile). let to odd x = conditional apply even succ x;; OCaml 7/9
Altri Esercizi Costruire una funzione che restituisca la funzione della retta dato in input m e q (i.e., f (x) = mx + q). Attenzione ai tipi. OCaml 8/9
Altri Esercizi Costruire una funzione che restituisca la funzione della retta dato in input m e q (i.e., f (x) = mx + q). Attenzione ai tipi. l e t l i n e m q x = m. x +. q ; ; OCaml 8/9
Altri Esercizi Costruire una funzione che restituisca la funzione della retta dato in input m e q (i.e., f (x) = mx + q). Attenzione ai tipi. l e t l i n e m q x = m. x +. q ; ; Esercizio Usando la funzione precedente costruire una funzione che dato in input due punti restituisce la funzione della retta passante per essi. Dato (x 1, y 1 ) e (x 2, y 2 ) m = y 2 y 1 x 2 x 1, q = y 1x 2 x 1 y 2 x 2 x 1 OCaml 8/9
Altri Esercizi Costruire una funzione che restituisca la funzione della retta dato in input m e q (i.e., f (x) = mx + q). Attenzione ai tipi. l e t l i n e m q x = m. x +. q ; ; Esercizio Usando la funzione precedente costruire una funzione che dato in input due punti restituisce la funzione della retta passante per essi. Dato (x 1, y 1 ) e (x 2, y 2 ) m = y 2 y 1 x 2 x 1, q = y 1x 2 x 1 y 2 x 2 x 1 l e t l i n e e q u a t i o n x ( x1, y1 ) ( x2, y2 ) = l i n e ( ( y2. y1 ) /. ( x2. x1 ) ) ( ( y1. x2. x1. y2 ) /. ( x2. x1 ) ) x ; ; OCaml 8/9
Altri Esercizi - 2 Costruire una funzione che preso in input due funzioni e una coppia (x,y) controlli se si intersecano in (x,y) OCaml 9/9
Altri Esercizi - 2 Costruire una funzione che preso in input due funzioni e una coppia (x,y) controlli se si intersecano in (x,y) l e t i n t e r s e c t i n l 1 l 2 ( x, y ) = ( l 1 x = y ) && ( l 2 x = y ) ; ; OCaml 9/9
Altri Esercizi - 2 Costruire una funzione che preso in input due funzioni e una coppia (x,y) controlli se si intersecano in (x,y) l e t i n t e r s e c t i n l 1 l 2 ( x, y ) = ( l 1 x = y ) && ( l 2 x = y ) ; ; Esercizio Costruire una funzione che calcoli il baricentro tra tre punti. OCaml 9/9
Altri Esercizi - 2 Costruire una funzione che preso in input due funzioni e una coppia (x,y) controlli se si intersecano in (x,y) l e t i n t e r s e c t i n l 1 l 2 ( x, y ) = ( l 1 x = y ) && ( l 2 x = y ) ; ; Esercizio Costruire una funzione che calcoli il baricentro tra tre punti. l e t b a r y c e n t e r ( x1, y1 ) ( x2, y2 ) ( x3, y3 ) = ( ( x1 +. x2 +. x3 ) /. 3., ( y1 +. y2 +. y3 ) /. 3. ) ; ; OCaml 9/9