User Tools

Site Tools


ex-l2

Esercitazione LIP 7/10/2014

  1. Definire una variabile di tipo tripla di interi
  2. Definire una funzione che, data in ingresso una tripla, ne restitusca il secondo elemento
  3. Definire una funzione che abbia il seguente tipo:
    int * int -> float * float
  4. Definire una funzione che abbia il seguente tipo:
    string * string -> int -> int
  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

  6. Definire una funzione
    f: boolboolboolint

    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
  7. Definire una funzione ricorsiva che termini e che abbia il seguente tipo:
    float -> int -> float
  8. Definire le seguenti funzioni di base, su interi positivi o nulli:
    1. iszero: intbool

      controlla se il parametro sia uguale a zero

    2. succ: intint

      calcola il successore di un numero naturale

    3. pred: intint

      calcola il predecessore di un numero naturale (pred 0 = 0).

  9. 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.
    1. leq:int → int → bool, leq n m valuta true se n ⇐ m, false altrimenti
    2. eq: int → int → bool, valuta true se n = m, false altrimenti.
    3. add: int → int → int, calcola la somma di due numeri naturali.
    4. sub:int → int → int, calcola la differenza tra due numeri naturali (sub n m = 0 if n<m).
    5. mul:int → int → int, calcola il prodotto di due numeri naturali.
    6. pow:int → int → int, calcola la potenza di due numeri naturali (i.e. pow n m = nm).
    7. ack:int → int → int, calcola la funzione di Ackermann http://en.wikipedia.org/wiki/Ackermann_function
  10. 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);;
ex-l2.txt · Last modified: 2015/10/08 15:20 (external edit)