ESERCIZI HASKELL

Esercizio 1

Definire in HASKELL il dato astratto "Tipo" (gli oggetti di questo tipo di dato astratto rapresentano i tipi dei sistemi a' la Church e a' la Curry per il lambda-calcolo).


Esercizio 2

Supponete di aver definito una funzione Haskell di nome funct.
Dire cosa fa il sistema se si scrive:
                                 type  funct
Dire cosa avrebbe fatto il sistema se prima della definizione di funct uno avesse scritto:
                                 funct :: [Int] -> Bool

  • Soluzione

    Esercizio 3

    Definire in HASKELL il tipo di dato astratto Albero binario etichettato con etichette numeriche.

  • Soluzione

    Esercizio 4

    Definire in HASKELL il tipo di dato astratto Albero ternario senza etichette.

  • Soluzione

    Esercizio 5

    Definire in Haskell il tipo di dato Albero ternario etichettato. Discutere brevemente la soluzione proposta.

  • Soluzione

    Esercizio 6

    In Haskell ogni termine, prima di venire valutato, viene tipato con un sistema di assegnamento simile a quello a' la Curry visto nel corso. I lambda termini tipabili a' la Curry hanno la proprieta' di essere fortemente normalizzabili. Questo dovrebbe implicare che ogni "programma" Haskell "termini". Invece non e' cosi'.
    Cosa e' presente in Haskell in piu', rispetto al sistema di assegnamento di tipi a'la Curry per il lambda calcolo, che fornisce al linguaggio la possibilita' di avere non terminazione?


    Esercizio 7

    Supponendo che non sia predefinito, definire in HASKELL il tipo di dato astratto Lista di Interi. E' possibile definire il tipo di dato Lista di elementi qualsiasi?

  • Soluzione

    Esercizio 8

    Cosa ha a che fare il lambda-calcolo tipato a' la Curry con HASKELL? Discutere.


    Esercizio 9

    La sonda Spirit ha trovato che su Marte esistono i Loffioni.
    Un Loffione puo' essere un Gangarone oppure un Sarrapone, oppure una sequenza finita di Purpuroni. Un Purpurone e' formato da un Gangarone e un Sarrapone. In natura il numero di sarraponi e' infinito, invece esistono solo due Gangaroni, il GangaroneA e il GangaroneB.
    Definire in Haskell il tipo di dato astratto Loffione che possa permettere di scrivere programmi Haskell che simulino esperimenti virtuali sui Loffioni.

  • Soluzione

    Esercizio 10

    Le seguente definizioni HASKELL
    f n = n:(f(n+1))
    nums = f 0
    
    corrispondono, in SCHEME, a
    (define (f n)  (cons n (f (+ n 1))))
    (define nums (f 0))
    
    Che cosa "dovrebbe" fare f? e cosa e' nums?
    Perche' in Haskell possiamo utilizzare f e nums (fornire possibilmente un esempio di uso), mentre in SCHEME non ci possiamo fare in pratica niente?
    Perche' comunque, anche se poi non ci possiamo fare un fico secco, SCHEME permette lo stesso di definire la funzione f senza darci problemi?

  • Soluzione

    Esercizio 11

    Presa la seguente definizione di tipo in HASKELL
    	data Pirimpo = Pompero Int | Zumpo Pirimpo [Int]
    	
    scrivere delle definizioni Scheme che permettano di utilizzare (per qual che e' possibile in Scheme) il tipo di dato Pirimpo.

  • Soluzione

    Esercizio 12
    Gli Yunz sono esseri magici che nella contea di Hargaar vengono usati dagli studenti per passare gli esami.
    Uno Yunz puo'  venire generato dicendo due numeri qualsiasi mentre si effettua l'incantesimo del mago Frunz su due Yunz. Il nanetto Yor e' uno Yunz.
  • Soluzione

    Esercizio 13

    Dire brevemente cosa fa' l'interprete HASKELL quando scriviamo qualcosa del genere:
    	funct :: [Int] -> Bool
    		
    	funct ls = BODY