Tecniche di Programmazione
Funzionale e Imperativa
Prof. Ivano Salvo
Corso di laurea in Informatica, 3zo anno
Avvisi
BREAKING NEWS: Per l'edizione
2022, iscrivetevi al Classroom
TPFI-22
, codice
nqsvha3.
Avviso: Gli studenti interessati a seguire il corso nel
2022, oltre a iscriversi al Classroom, sono pregati di inviare una mail al docente e specificare se intendono seguire il corso in presenza o da remoto.
Vecchi Avvisi
Avviso: Eventuali studenti che non avessero seguito il corso, ma intendono sostenere l'esame, sono pregati di contattare il docente.
Descrizione del Corso
Il corso mira a introdurre il paradigma di programmazione funzionale, attraverso lo studio del linguaggio Haskell.
Viene inoltre fatto un confronto con il paradigma imperativo e quello funzionale.
Vengono infine introdotti metodi per ragionare sulla correttezza dei programmi in entrambi i paradigmi.
1. Programmazione Funzionale.
- Concetti base di Haskell: tipi, funzioni, definizioni ricorsive.
- Polimorfismo, classi, tipi definiti dall'utente, funzioni di ordine superiore.
- Call-by-name e valutazione lazy. Tipi di dato infiniti.
- Trattamento di aspetti non-funzionali (IO, eccezioni, stato, etc.) in Haskell: Funtori, Applicativi e Monadi.
- Sviluppo di programmi corretti e trasformazioni di programmi: ragionamento equazionale.
2. Programmazione Imperativa.
- Ripasso di programmazione base in C.
- Gestione esplicita della memoria in C, alias, side-effects.
- Confronti e contaminazioni I: programmazione funzionale in C.
- Confronti e contaminazioni II: programmazione imperativa in Haskell.
- Sviluppo di programmi corretti in C: asserzioni logiche. Limiti di questa metodologia nella programmazione imperativa.
3. Perle di Programmazione Funzionale e Imperativa.
- Ogni anno verranno selezionate 4-6 perle di programmazione imperativa.
- e 4-6 perle di programmazione funzionale.
Orario delle Lezioni 2021/22 - II semestre
martedì |
14-16 |
aula Alfa (via Salaria) |
vedi classroom |
venerdì |
16-19 |
aula Magna (Regina Elena, ed. C) |
vedi classroom |