Esercitazione PR2
Lunedì 18 novembre 2016

TESTI


    [1] Si definisca una funzione OCaML is_palindrome che determina se una lista è palindroma.
    # is_palindrome ["x"; "a"; "m"; "a"; "x"];;
    - : bool = true 
    
    # not(is_palindrome ["a"; "b"]);;
    - : bool = true 
    
    Soluzione: il file ese1.

    [2] Si definisca una funzione OCaML a tre argomenti insert_at che prende un elemento x, un indice n ed una lista lst, e inserisce x in posizione n in lst.
    # insert_at "alfa" 1 ["a"; "b"; "c"; "d"];;
    - : string list = ["a"; "alfa"; "b"; "c"; "d"]
    
    # insert_at "alfa" 3 ["a"; "b"; "c"; "d"];;
    - : string list = ["a"; "b"; "c"; "alfa"; "d"]
    
    # insert_at "alfa" 4 ["a"; "b"; "c"; "d"];;
    - : string list = ["a"; "b"; "c"; "d"; "alfa"]
    
    Soluzione: il file ese2.

    [3] Si definisca una funzione OCaML range che prende due interi a e b e restituisce una lista contenenti tutti gli interi nell'intervallo da a a b.
    # range 4 9;;
    - : int list = [4; 5; 6; 7; 8; 9]
    
    # range 9 4;;
    - : int list = [9; 8; 7; 6; 5; 4]
    
    Soluzione: il file ese3.

    [4] Si consideri la possibilità di poter definire funzioni ricorsive, come ad esempio nella seguente espressione OCaML-like
    let g = fun rec f x -> f(x+1) in g 3;;
    Si estenda la sintassi astratta del frammento di linguaggio funzionale visto a lezione e modellato nel semplice interprete associato in modo da includere funzione ricorsive. Si definiscano inoltre le regole OCaML dell'interprete per trattare la valutazione di dichiarazione e la chiamata di funzioni ricorsive.

    Soluzione: il file evalSubRec.