User Tools

Site Tools


ex-l2-sol
  1. Definire una variabile di tipo tripla di interi
    	let x = (1,2,3);;
    	let x = 1,2,3 ;;
  2. Definire una funzione che, data in ingresso una tripla, ne restitusca il secondo elemento
    let f (a,b, c) = a;;
  3. Definire una funzione che abbia il seguente tipo: int * int → float * float
    	let f (n,m) = if (n + m = 1) then (2.0 , 3.0)
    else (2.0, 3.0);;
  4. Definire una funzione che abbia il seguente tipo: string * string → int → int
    let f (a, b) n = if (a^b = “”) then n+1 else n-1;;
  5. Definire una funzione f : int → int → int → int * int * int che, dati tre numeri interi, restituisca il massimo, il minimo e la media di essi in una tripla (se ne presentano 3 soluzioni)
    let max a b = if (a>b) then a else b;;
    let min a b = if (a>b) then b else a;;
    let f a b c = ( (let t = max a b in max t c), 
    		(let s = min a b in min s c), 
    (a + b + c )/ 3 );;	
    let max a b = if (a>b) then a else b;;
    let min a b = if (a>b) then b else a;;
    let f a b c = ( max c (max a b),
    min c (min a b), 
    (a + b + c )/ 3 );;
    let f x y z = let max a b = if (a >b) then a else b in
    let m = max x y in let massimo = max m z in
    let min i o = if (i <o) then i else o in
    let n = min x y in let minimo = min n z in
    let media = (x+y+z)/3 in 
    (massimo, minimo , media);;
  6. Definire una funzione f: bool → bool → bool → int tale che f e1 e2 e3 restituisca n se n delle espressioni booleane in ingresso sono vere. Es: f true (2>3) (2+2=4) restituisce 2
    let isTrue e = if e then 1 else 0;;
    let f e1 e2 e3 = isTrue e1 + isTrue e2 + isTrue e3;;
    let f e1 e2 e3 = let d = if e1 then 1 else 0 in 
    let e = if e2 then 1 else 0 in 
    let f = if e3 then 1 else 0 in d + e + f;;  
  7. Definire una funzione ricorsiva che termini e che abbia il seguente tipo: float → int → float
    let rec  f  m n = if ( n = 0 ) then 2.0 else f 1.0 (n-1) ;;
  8. Definire le seguenti funzioni di base, su interi positivi o nulli:
    let iszero n =  n=0 ;;
    let succ n = n+1;;
    let pred n = if (n=0) then 0 else n-1;;
  9. Utilizzando le funzioni di base definite al punto precedente, definire le seguenti funzioni utilizzando la ricorsione.
    let rec leq n m = if (iszero n) then true else 
    if (iszero m) then false else 
        leq (pred n) (pred m);;
    let eq n m = if(iszero n && iszero m) then true else 
    if(iszero n || iszero m) then false else
    eq (pred n) (pred m);; 
    let eq n m = (leq n m) && (leq m n);;
    let rec add n m = if (iszero m) then n 
    else add (succ n) (pred m);;
    let rec sub n m = if (leq  n m) then 0 else 
    if (iszero m) then n else sub (pred n) (pred m);; 
    let rec sub n m = 
    if (iszero m) then n else sub (pred n) (pred m);;
    let rec mul n m = if (iszero n) then 0                   
    else add m (mul (pred n) m);; 
    let rec pow n m = if (iszero m)                   
    then 1 else mul n (pow n (pred m));;
    let rec ack m n =
      if m=0 then (n+1) else
      if n=0 then (ack (m-1) 1) else
      (ack (m-1) (ack m (n-1)))
  10. Non tail recursive:
    let rec f x =  if x=0 then 0
                     else if x>0 then 1 + f (1-x)
                          else 1 + f (-1-x);;

Tail recursive:

let rec f2 x acc = if x = 0 then acc 
else if (x < 0) then f2 (-1-x) (1+acc) else f2 (1-x) (1+acc);;
let rec f3 x= f2 x 0;;
ex-l2-sol.txt · Last modified: 2015/10/08 15:20 (external edit)