Programmazione Funzionale 2006/2007

docente: Fausto Spoto
fausto.spoto@univr.it

Materiale didattico:
  • Il sito del linguaggio OCaml
  • Lucidi introduttivi al corso
  • Introduzione a OCaml
  • Introduzione a OCaml (strutture, segnature e funtori)
  • Introduzione al lambda-calcolo

    Ogni anno ci sono due borse erasmus da 5 a 9 mesi ciascuna per l'Isola della Réunion (Oceano Indiano, Francia). Anche quest'anno andranno perse? Clicca qui per saperne di piú.


    Esempi di esercizi da compito (uno o piú di questi esercizi): Lezione 1 (3 ottobre 2006, 9:30 - 11:30, aula I)
  • Introduzione al corso
  • Storia della programmazione funzionale
  • Il concetto della persistenza
  • Primi esempi di programmazione in OCaml
    Lezione 2 (5 ottobre 2006, 14:30 - 16:30, aula I)
  • Semplici funzioni OCAML che lavorano su liste
  • Definizioni locali (let...in)
  • Funzioni di ordine superiore
  • Mappature
  • Tipi coppia e record
  • Tipi algebrici
    Lezione 3 (9 ottobre 2006, 8:30 - 9:30, aula I)
  • Tipo algebrico per le espressioni: derivata e valutazione
  • Tipo algebrico per i numeri naturali: operazioni di base
    Laboratorio 1 (10 ottobre 2006, 9:30 - 11:30, laboratorio alfa)
  • Si aggiunga al seguente sorgente la funzione max per il calcolo del massimo fra due numeri naturali, la funzione prime che determina se un numero naturale è primo e la funzione sqrt che calcola la radice quadrata (parte intera inferiore) di un numero naturale.
    Lezione 4 (12 ottobre 2006, 14:30 - 16:30, aula I)
  • Lambda-calcolo: lambda-espressioni, variabili libere e occorrenze legate
  • Implementazione di booleani e naturali in lambda-calcolo puro
    Lezione 5 (16 ottobre 2006, 8:30 - 9:30, aula I)
  • Esercizi su booleani, coppie e naturali alla Peano in lambda calcolo puro
    Laboratorio 2 (17 ottobre 2006, 9:30 - 11:30, laboratorio alfa)
  • Si consideri il tipo per le lambda espressioni contenuto in questo file. Si aggiunga:
    Lezione 6 (19 ottobre 2006, 14:30 - 16:30, aula I)
  • Punti fissi: combinatore Y e ricorsione
  • Ordine di riduzione normale e forma normale
  • Call-by-value e valutazione lazy
  • Lambda-calcolo con costanti
    Lezione 7 (23 ottobre 2006, 8:30 - 9:30, aula I)
  • Regole di tipaggio per il lambda-calcolo con costanti
  • Esempi di tipaggio di lambda-espressioni con costanti
    Laboratorio 3 (24 ottobre 2006, 9:30 - 11:30, laboratorio alfa)
  • Si parta da questo file sorgente in cui la funzione fresh exp restituisce il nome di una variabile fresca nell'espressione exp. Si aggiunga a tale file una funzione subst:lambda_exp->string->lambda_exp-> lambda_exp tale che subst exp1 s exp2 sia l'espressione ottenuta sostituendo s in exp1 con exp2.
    Lezione 8 (26 ottobre 2006, 14:30 - 16:30, aula I)
  • Inferenza dei tipi per il lambda-calcolo con costanti
  • Esempi di inferenza dei tipi
  • Implementazione dell'inferenza dei tipi
    Laboratorio 4 (31 ottobre 2006, 9:30 - 11:30, laboratorio alfa)
    Lezione 9 (2 novembre 2006, 14:30 - 16:30, aula I)
  • Unificazione di un insieme di vincoli di tipo
  • Implementazione dell'unificazione
  • Il codice dell'unificazione è qui
    Laboratorio 5 (7 novembre 2006, 9:30 - 11:30, laboratorio alfa)
    Lezione 10 (9 novembre 2006, 14:30 - 16:30, aula I)
  • Strutture, segnature, funtori e incapsulazione in OCAML
  • Heap sinistrorsi in OCAML: heaps.ml
    Laboratorio 6 (14 novembre 2006, 9:30 - 11:30, laboratorio alfa)
    Lezione 11 (15 novembre 2006, 10:30 - 11:30, aula I)
  • Gli heap binomiali in OCAML: Heaps2.ml
    Lezione 12 (16 novembre 2006, 14:30 - 16:30, aula I)
  • Gli alberi rosso-neri: RedBlackTrees.ml
  • Sospensioni e stream: Stream.ml
    Laboratorio 7 (21 novembre 2006, 9:30 - 11:30, laboratorio alfa)
    Lezione 13 (22 novembre 2006, 10:30 - 11:30, aula I)
  • Il bytecode CAML
  • Schema di compilazione: ambiente statico e dinamico
  • Compilazione di costanti e variabili
    Lezione 14 (23 novembre 2006, 14:30 - 16:30, aula I)
  • Compilazione di funzioni, composizioni, definizioni locali e ricorsione
  • Implementazione CAML della compilazione dei lambda-termini e dell'interpretazione del bytecode CAML: compilation.ml
    Laboratorio 8 (28 novembre 2006, 9:30 - 11:30, laboratorio alfa)