Esercitazione LIP 7/10/2014
Definire una variabile di tipo tripla di interi
Definire una funzione che, data in ingresso una tripla, ne restitusca il secondo elemento
-
-
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
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
Definire una funzione ricorsiva che termini e che abbia il seguente tipo:
float -> int -> float
Definire le seguenti funzioni di base, su interi positivi o nulli:
iszero: int → bool
controlla se il parametro sia uguale a zero
succ: int → int
calcola il successore di un numero naturale
pred: int → int
calcola il predecessore di un numero naturale (pred 0 = 0).
Utilizzando le funzioni di base definite al punto precedente, definire le seguenti funzioni utilizzando la ricorsione. E’ proibito utilizzare qualsiasi operatore aritmetico (+, -, <, >, etc). E’ invece possibile (e consigliato) riutilizzare le funzioni che vengono definite man mano.
leq:int → int → bool
, leq n m
valuta true se n ⇐ m
, false altrimenti
eq: int → int → bool
, valuta true
se n = m
, false altrimenti.
add: int → int → int
, calcola la somma di due numeri naturali.
sub:int → int → int
, calcola la differenza tra due numeri naturali (sub n m = 0 if n<m
).
mul:int → int → int
, calcola il prodotto di due numeri naturali.
pow:int → int → int
, calcola la potenza di due numeri naturali (i.e. pow n m = nm
).
-
Dire che cosa calcoli la seguente funzione e scriverne la versione 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);;