Diario delle Lezioni 2021
Lunedì 3 marzo 2021 - Lezione 1 (
La Babele dei Linguaggi di Programmazione)
L'importanza dei Linguaggi di Programmazione nella pratica della produzione del software.
Breve introduzione ai principali paradigmi di programmazione: imperativo, funzionale, logico, a oggetti.
Cenni all'evoluzione dei Linguaggi di Programmazione.
Giovedì 4 marzo 2021 - Lezione 2 (
In principio era il Lambda-Calcolo)
Breve introduzione ai fondamenti teorici della programmazione funzionale: il lambda-calcolo.
Termini, riduzioni, valori.
Proprietà di confluenza e di standardizzazione delle riduzioni.
Programmare in lambda calcolo: numerali di Church, if-then-else, ricorsione, combinatore di punto fisso.
Lunedì 8 marzo 2021 - Lezione 3 (
Quegli Strani Tipi Polimorfi)
Primi esempi in Haskell: combinatori del lambda-calcolo.
Tipi polimorfi: l'identità polimorfa e numerali di Church.
Tipo principale di un termine.
Giovedì 11 marzo 2021 - Lezione 4 (
Verso un Ordine Superiore: Funzioni e Funzionali)
Funzioni come first-class citizen.
Programmazione su liste in Haskell.
Funzionali di ordine superiore: map
, foldr
, zipWith
. Applicazioni.
Lunedì 15 marzo 2021 - Lezione 5 (
Una Questione di Classe)
Polimorfismo limitato in Haskell: le classi.
Le classi in Haskell. Classi predefinite: Eq
, Ord
, Num
, etc.
Definizione di classi e istanze.
Giovedì 18 marzo 2021 - Lezione 6 (
Alla Ricerca del Tipo Principale)
Sistema di assegnamento dei tipi.
L'algoritmo di Hindley-Milner per il calcolo del tipo principale.
Cenni alla sua correttezza e completezza.
Lunedì 22 marzo 2021 - Lezione 7 (
Astrazioni Categoriali: Funtori e Applicativi)
Le classi Functor
e Applicative
.
Assiomatizzazione delle leggi che fmap
e <*>
devono soddisfare.
Applicazioni a programmazione generica.
Giovedì 25 marzo 2021 - Lezione 8 (
Equivalenze Algebriche e Trasformazioni di Programmi)
Equivalenze algebriche tra programmi: dimostrazioni di correttezza e trasformazioni di programmi.
Uso di funzioni inefficienti come specifica e di dimostrazioni algebriche per ricavare equivalenti funzioni efficienti.
Esempi: reverse
lineare, scanl
lineare etc.
Alcune utili leggi: fusion law per foldr.
Lunedì 29 marzo 2021 - Lezione 9 (
Prime Perle: Sottosequenza di Somma Massima e Minimo Intero Libero)
Applicazione delle trasformazioni di programmi a famosi problemi di programmazione.
Perla 1: il problema del minimo intero libero.
Perla 2: il problema della sottosequenza di somma massima.
Giovedì 8 aprile 2021 - Lezione 10 (
The Importance of Being Lazy)
Valutazione call-by-name nella pratica di programmazione: efficienze e inefficienze.
Definizione di strutture dati infinite grazie alla laziness.
Lunedì 12 aprile 2021 - Lezione 11 (
Perle di Laziness I: Ulam e Hamming Numbers)
Calcolo di due successioni famose con programmi circolari: numeri di Ulam e Hamming numbers.
Giovedì 15 aprile 2021 - Lezione 12 (
Perle di Laziness II: Primi, primo amore)
Alcuni `algoritmi' funzionali per il calcolo dei numeri primi.
- Trial division
- Crivello di Eratostene di Turner (vero o presunto) e crivello di Bird.
- Crivello di Eulero.
Lunedì 19 aprile 2021 - Lezione 13 (
Effectful Programming in Haskell: Monadi)
Eccezioni e altri aspetti non funzionali.
Utilizzo delle monadi per trattare:
- eccezioni;
- stato mutabile;
- input/output.
Giovedì 22 aprile 2021 - Lezione 14 (
More on Monads and More)
Monadi e leggi categoriali.
Altre astrazioni di ispirazione categoriale: monoidi, Foldable e Traversable.
Lunedì 26 aprile 2021 - Lezione 15 (
Cambiare il Mondo: Input/Output in Haskell)
Il problema dell'Input/Output in Haskell.
do-notation.
Giovedì 29 aprile 2021 - Lezione 16 (
Goodbye Haskell: Ultima Perla. Unbeatable Tic-Tac-Toe)
Ultima Perla: Tic-Tac-Toe in Haskell.
Lunedì 3 maggio 2021 - Lezione 17 (
Indagini su un Programma Iterativo: Pre-, Post-condizioni, Ivarianti)
Giovedì 6 maggio 2021 - Lezione 18 (
Parli del Diavolo e Spuntano i Puntatori)
Lunedì 10 maggio 2021 - Lezione 19 (
Lo Strano Caso di Dr. Array e Mr. Pointer)
Giovedì 13 maggio 2021 - Lezione 20 (
Vettori e Matrici Variabili e Dinamiche)
Lunedì 17 maggio 2021 - Lezione 21 (
Dati Mutabili e Immutabili: il caso delle Liste)
Giovedì 20 maggio 2021 - Lezione 22 (
Programmazione su Liste in C)
Lunedì 24 maggio 2021 - Lezione 23 (
Perle di Stile e di Programmazione)
Lunedì 31 maggio 2021 - Lezione 24 (
Polimorfismo in C)
--
Ivano Salvo - 2021-02-25
This topic: TPFI
> WebHome > DiarioDelleLezioni
Topic revision: r3 - 2021-06-14 - IvanoSalvo