User Tools

Site Tools


ex-l6

Gli esercizi con flag (*) sono particolarmente impegnativi.

Esercizi sulle liste:

  1. Utilizzando il combinatore fold_right scrivere le seguenti funzioni:
    1. length: 'a list → int, restituisce la lunghezza di una lista.
    2. count: 'a → 'a list → int, conta le occorrenze di un elemento in una lista
    3. rev: 'a list → 'a list, rovescia una lista.
    4. append : 'a list → 'a list → 'a list, concatena due liste.
  2. Scrivere una funzione che ordini gli elementi di una lista in modo crescente, utilizzando l’algoritmo di merge sort . Ad esempio:
     sort [3;4;5;1;2;7;6];;
    - : int list = [1; 2; 3; 4; 5; 6; 7]
  3. (***) Definire la funzione perm in modo che, presa in ingresso una lista l, restituisca la lista di tutte le permutazioni degli elementi di l. Esempio:
    perm [1;2;3];;
    - : int list list = [[1; 2; 3]; [2; 1; 3]; [2; 3; 1]; [1; 3; 2]; [3; 1; 2]; [3; 2; 1]]

Esercizi sui tipi varianti (tagged unions):

  1. Scrivere una funzione fib : int → int partial che dato un intero n restituisca l’ennesimo numero di fibonacci se n>0, None altrimenti
  2. (*) Modellare il gioco delle carte, giocato con un mazzo da 40 carte con semi francesi (cuori, picche, denari e fiori). Un mazzo di carte e’ un valore del tipo mazzo dove:
    type seme = Picche | Cuori | Denari | Fiori ;;
    type carta = Carta of int * seme;;
    type mazzo = Mazzo of carta list;;

    ad esempio, un mazzo sara’ una lista di elementi di tipo carta:

    let Mazzo =  [Carta (1, Picche); Carta (1, Cuori); Carta (1, Denari); Carta (1, Fiori); Carta (2, Picche); Carta (2, Cuori).....]

    Non tutti i valori di tipo carta rappresentano una carta da gioco, ma solo quelli il cui numero e’ compreso tra 1(Asso) e 10 (Re). Ad esempio la funzione 'is_card_correct' restituisce true se la carta e’ corretta.

    let is_card_correct (Carta (n,s)) = n>=1 && n<=10;;

    Scrivere le seguenti funzioni su un mazzo di carte:

    1. is_complete : mazzo → bool , dice se un mazzo e’ corretto e completo (se e’ composto da 40 carte tutte diverse e tutte valide)
    2. new_mazzo: unit → mazzo , crea un nuovo e valido mazzo di carte. (nota: non e’ permesso enumerare tutte le carte)
    3. partition : mazzo → mazzo * mazzo * mazzo * mazzo, partiziona il mazzo in quattro mazzi composti dalle carte dello stesso seme.
ex-l6.txt · Last modified: 2015/10/08 15:20 (external edit)