User Tools

Site Tools


ex-l2-plus

Esercizi

  1. Scrivere una funzione Ocaml che calcoli l'n-esimo termine delle seguenti successioni definite per ricorrenza:
        coefficiente binomiale:
        cb(n,k) = 1, se k=0 o k=n
        cb(n,k) = cb(n-1,k-1) + cb(n-1,k)
        
        f(0) = 0, f(1) = 1
        f(n) = 2*f(n − 2) + f(n − 1), se n ≥ 2
        Hofstadter Female and Male Sequences (mutual recursion):
        f(0) = 1
        f(n+1) = (n+1) - m(f(n))
        m(0) = 0
        m(n+1) = (n+1) - f(m(n))

    Per esempio:

    # cb 5 2;;
    - : int = 10
    #  f 11;;
    - : int = 683
    # f 6;;
    - : int = 21
    # f 11;;
    - : int = 7
    # m 10;;
    - : int = 6
  2. Covertire le seguenti funzioni in forma tail recursive
    let rec fact n =  
        if n=0 then 1
        else n*fact(n-1);;
    let rec exp x n =  
        if n=0 then 1
        else x * exp x (n-1);;
    let rec fib n =  
        if n=1 then 1
        else if n=2 then 1
        else fib(n-1) + fib(n-2);;
    let rec real n =   if n=0 then 0.0
        else 1.0 +. real (n-1);;
  3. Tuple
    1. Scrivere una funzione che prende 5 interi e restituisce una tupla i cui elementi sono il risultato dell'applicazione di una delle funzioni precedenti (fact, exp con n=2, fib, real, scrivere in tutto 4 funzioni) ai parametri di ingresso. Esempio (con funzione fattoriale):
      # f 2 3 4 5 6;;
      - : int * int * int * int * int = (2, 6, 24, 120, 720)
    2. Scrivere una funzione che prende due coppie in ingresso e restituisce una coppia formata dalle prime due in ordine lessicografico i.e. (x,y) < (z,t) se x < z oppure x=z e y<t. Esempio:
      # les (5,2) (4,5);;
      - : (int * int) * (int * int) = ((4,5), (5,2))
ex-l2-plus.txt · Last modified: 2015/10/08 15:20 (external edit)