User Tools

Site Tools


ex-l6

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ex-l6 [2014/10/28 18:25]
t.cimoli
ex-l6 [2015/10/08 15:20] (current)
Line 1: Line 1:
 +Gli esercizi con flag (*) sono particolarmente impegnativi. ​
 +
 +Esercizi sulle liste: ​
   - Utilizzando il combinatore fold_right scrivere le seguenti funzioni:   - Utilizzando il combinatore fold_right scrivere le seguenti funzioni:
     - ''​length:​ 'a list → int'',​ restituisce la lunghezza di una lista.     - ''​length:​ 'a list → int'',​ restituisce la lunghezza di una lista.
Line 4: Line 7:
     - ''​rev:​ 'a list → 'a list'',​ rovescia una lista.     - ''​rev:​ 'a list → 'a list'',​ rovescia una lista.
     - ''​append : 'a list → 'a list → 'a list'',​ concatena due liste.     - ''​append : 'a list → 'a list → 'a list'',​ concatena due liste.
-  - Scrivere una funzione fib : int -> int partial che dato un intero n restituisca l’ennesimo numero di fibonacci se n>0, None altrimenti +  - Scrivere una funzione ​che ordini gli elementi di una lista in modo crescente, utilizzando l’algoritmo di merge sort . Ad esempio:<​code ocaml> sort [3;​4;​5;​1;​2;​7;​6];;​ 
-  - 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:<​code ocaml>​type seme = Picche | Cuori | Denari | Fiori ;;+- : int list = [1; 2; 3; 4; 5; 6; 7]</​code>​ 
 +  - (***) 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:<​code ocaml>  
 +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]]</​code>​ 
 + 
 + 
 +Esercizi sui tipi varianti (tagged unions): ​  
 + 
 +  - Scrivere una funzione ''​fib : int -> int partial'' ​che dato un intero n restituisca l’ennesimo numero di fibonacci se ''​n>0''​''​None'' ​altrimenti 
 +  - (*) 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:<​code ocaml>​type seme = Picche | Cuori | Denari | Fiori ;;
 type carta = Carta of int * seme;; type carta = Carta of int * seme;;
 type mazzo = Mazzo of carta list;;</​code>​ad esempio, un mazzo sara’ una lista di elementi di tipo carta:<​code ocaml>​let Mazzo =  [Carta (1, Picche); Carta (1, Cuori); Carta (1, Denari); Carta (1, Fiori); Carta (2, Picche); Carta (2, Cuori).....]</​code>​ 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.<​code ocaml>​let is_card_correct (Carta (n,s)) = n>=1 && n<​=10;;</​code>​Scrivere le seguenti funzioni su un mazzo di carte: type mazzo = Mazzo of carta list;;</​code>​ad esempio, un mazzo sara’ una lista di elementi di tipo carta:<​code ocaml>​let Mazzo =  [Carta (1, Picche); Carta (1, Cuori); Carta (1, Denari); Carta (1, Fiori); Carta (2, Picche); Carta (2, Cuori).....]</​code>​ 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.<​code ocaml>​let is_card_correct (Carta (n,s)) = n>=1 && n<​=10;;</​code>​Scrivere le seguenti funzioni su un mazzo di carte:
Line 11: Line 23:
      - ''​new_mazzo:​ unit →  mazzo''​ , crea un nuovo e valido mazzo di carte. (nota: non e’ permesso enumerare tutte le carte)      - ''​new_mazzo:​ unit →  mazzo''​ , crea un nuovo e valido mazzo di carte. (nota: non e’ permesso enumerare tutte le carte)
      ​- ​ ''​partition : mazzo → mazzo * mazzo * mazzo * mazzo'',​ partiziona il mazzo in quattro mazzi composti dalle carte dello stesso seme.      ​- ​ ''​partition : mazzo → mazzo * mazzo * mazzo * mazzo'',​ partiziona il mazzo in quattro mazzi composti dalle carte dello stesso seme.
-  - Scrivere una funzione che ordini gli elementi di una lista in modo crescente, utilizzando l’algoritmo di merge sort . Ad esempio:<​code ocaml> sort [3;​4;​5;​1;​2;​7;​6];;​ + 
-- : int list = [1; 2; 3; 4; 5; 6; 7]</​code>​+
  
ex-l6.txt · Last modified: 2015/10/08 15:20 (external edit)