PROGRAMMAZIONE LOGICA E FUNZIONALE
LOGIC AND FUNCTIONAL PROGRAMMING
A.A. | CFU |
---|---|
2024/2025 | 6 |
Docente | Ricevimento studentesse e studenti | |
---|---|---|
Marco Bernardo | Giovedì 16:00 - 18:00 oppure su appuntamento |
Didattica in lingue straniere |
---|
Insegnamento con materiali opzionali in lingua straniera
Inglese
La didattica è svolta interamente in lingua italiana. I materiali di studio e l'esame possono essere in lingua straniera. |
Assegnato al Corso di Studio
Giorno | Orario | Aula |
---|
Giorno | Orario | Aula |
---|
Obiettivi Formativi
Questo insegnamento ha lo scopo di illustrare i principi di base, le tecniche e gli strumenti della programmazione di applicazioni informatiche attraverso la presentazione dei concetti tipici e dei fondamenti teorici della programmazione dichiarativa di natura logica e di natura funzionale e il loro confronto con quelli della programmazione imperativa.
Programma
01. Introduzione a Paradigmi e Linguaggi di Programmazione
01.01 Definizioni di Base per Paradigmi e Linguaggi
01.02 Programmazione Imperativa: Procedurale e a Oggetti
01.03 Programmazione Dichiarativa: Funzionale e Logica
01.04 Linguaggi di Programmazione Sequenziali e Concorrenti
01.05 Linguaggi di Script, Interrogazione, Markup, Modellazione
02. Richiami di Matematica Discreta
02.01 Elementi di Teoria degli Insiemi
02.02 Relazioni, Funzioni, Operazioni
02.03 Principio di Induzione
03. Lambda Calcolo
03.01 Sintassi del Lambda Calcolo
03.02 Semantica del Lambda Calcolo e Logica Combinatoria
03.03 Ricorsione via Punti Fissi e Calcolabilità
03.04 Terminazione e Confluenza nel Lambda Calcolo
03.05 Lambda Calcolo con Tipi
04. Programmazione Funzionale: Il Linguaggio Haskell
04.01 Dal Lambda Calcolo alla Programmazione Funzionale
04.02 Haskell: Assemblaggio di Caratteristiche Funzionali
04.03 Haskell: Espressioni, Tipi di Dati, Classi di Tipi
04.04 Haskell: Funzioni, Guardie, Pattern Matching
04.05 Haskell: Funzioni Polimorfe, di Ordine Superiore, Anonime
04.06 Haskell: Valutazione Pigra, Input/Output, Moduli
05. Logica Proposizionale
05.01 Sintassi della Logica Proposizionale
05.02 Semantica e Intrattabilità della Logica Proposizionale
05.03 Conseguenza ed Equivalenza nella Logica Proposizionale
05.04 Proprietà Algebriche dei Connettivi Logici
05.05 Sistemi Deduttivi per la Logica Proposizionale
06. Logica dei Predicati
06.01 Sintassi della Logica dei Predicati
06.02 Semantica e Indecidibilità della Logica dei Predicati
06.03 Conseguenza ed Equivalenza nella Logica dei Predicati
06.04 Proprietà Algebriche dei Quantificatori
06.05 Sistemi Deduttivi per la Logica dei Predicati
07. Refutazione di Formule Logiche
07.01 Forme Normali per la Logica Proposizionale e dei Predicati
07.02 Unificazione di Formule di Logica dei Predicati
07.03 Teoria di Herbrand e Algoritmo di Refutazione
07.04 Risoluzione di Robinson e Algoritmo di Refutazione
08. Programmazione Logica: Il Linguaggio Prolog
08.01 Dalla Logica alla Programmazione Logica
08.02 Prolog: Clausole di Horn e Strategia di Risoluzione SLD
08.03 Prolog: Sintassi dei Termini e Predicati Predefiniti
08.04 Prolog: Negazione, Taglio, Input/Output, Predicati Avanzati
09. Attività di Laboratorio in Linux
09.01 Il Compilatore/Interprete ghci
09.02 Implementazione e Modifica di Programmi Haskell
09.03 Il Compilatore/Interprete gprolog
09.04 Implementazione e Modifica di Programmi Prolog
Eventuali Propedeuticità
Non vi sono propedeuticità obbligatorie. Si suggerisce di sostenere l'esame di Programmazione Logica e Funzionale dopo aver sostenuto l'esame di Logica, Algebra e Geometria, l'esame di Programmazione Procedurale, l'esame di Algoritmi e Strutture Dati, l'esame di Programmazione e Modellazione a Oggetti e l'esame di Linguaggi di Programmazione e Verifica del Software.
Risultati di Apprendimento (Descrittori di Dublino)
Conoscenza e comprensione
Si completeranno le proprie conoscenze fondamentali nel campo della programmazione degli elaboratori, acquisite nei due anni precedenti rispetto al paradigma imperativo di natura procedurale e di natura a oggetti, con quelle relative al paradigma di programmazione dichiarativo di natura logica e di natura funzionale esemplificati rispettivamente attraverso i linguaggi Prolog e Haskell. Preventivamente si approfondiranno le conoscenze di logica proposizionale e di logica dei predicati introdotte al primo anno e si apprenderanno le basi del lambda calcolo quale fondamento della programmazione funzionale.
Capacità di applicare conoscenza e comprensione
Si sarà in grado di progettare e sviluppare sistemi software tramite l'applicazione di una metodologia introdotta al primo anno che copre l'analisi del problema, la progettazione dell'algoritmo e l'implementazione, il testing, la verifica e la manutenzione del programma, dove la fase di implementazione verrà condotta attraverso un linguaggio di programmazione dichiarativo di natura logica o funzionale.
Autonomia di giudizio
Si sarà in grado di valutare e confrontare progetti alternativi di uno stesso sistema software, così come di analizzare e comparare implementazioni alternative in un linguaggio imperativo o dichiarativo di uno stesso progetto software.
Abilità comunicative
Si sarà in grado di usare in modo appropriato la terminologia dei linguaggi di programmazione dichiarativi di natura logica e di natura funzionale. Inoltre si sapranno illustrare le caratteristiche salienti del progetto e dell'implementazione in un linguaggio dichiarativo di un sistema software, inclusa la produzione della documentazione del sistema software in termini di relazione tecnica, commenti interni e manuale d'uso.
Capacità di apprendimento
Si acquisirà la capacità di apprendere le peculiarità sintattiche e semantiche di qualsiasi linguaggio di programmazione dichiarativo di natura logica e di natura funzionale.
Materiale Didattico
Il materiale didattico predisposto dalla/dal docente in aggiunta ai testi consigliati (come ad esempio diapositive, dispense, esercizi, bibliografia) e le comunicazioni della/del docente specifiche per l'insegnamento sono reperibili all'interno della piattaforma Moodle › blended.uniurb.it
Attività di Supporto
Esercizi svolti per l'autovalutazione del livello di preparazione sono disponibili all'interno della piattaforma Moodle per il blended learning.
Modalità Didattiche, Obblighi, Testi di Studio e Modalità di Accertamento
- Modalità didattiche
Lezioni teoriche ed esercitazioni guidate in laboratorio.
- Obblighi
Sebbene non obbligatoria, la frequenza è fortemente consigliata.
- Testi di studio
Barendregt, "The Lambda Calculus: Its Syntax and Semantics", North Holland, 2014.
Thompson, "Haskell: The Craft of Functional Programming", Addison-Wesley, 2011.
Asperti, Ciabattoni, "Logica a Informatica", McGraw-Hill, 1997
(Schöning, "Logic for Computer Scientists", Birkhäuser, 2008).Console, Lamma, Mello, Milano, "Programmazione Logica e Prolog", UTET, 1997
(Sterling, Shapiro, "The Art of Prolog", MIT Press, 1997).Gabbrielli, Martini, "Linguaggi di Programmazione: Principi e Paradigmi", McGraw-Hill, 2011
(Gabbrielli, Martini, "Programming Languages: Principles and Paradigms", Springer, 2010).
- Modalità di
accertamento Progetto, prova scritta e prova orale.
Il progetto, che deve essere sviluppato in gruppi da due su un problema concordato col docente, consiste nell'implementazione di un programma Haskell e di un programma Prolog per quel problema seguendo la metodologia di sviluppo software "in the small" presentata nell'insegnamento di Programmazione Procedurale. Il progetto deve essere consegnato almeno 10 giorni prima della prova scritta; in caso di consegna tardiva, viene applicata una penale di 3/30 per ogni giorno di ritardo. Qualora il progetto venga riconsegnato in un successivo appello d'esame, il voto del progetto precedentemente consegnato viene annullato; la riconsegna del progetto, nella medesima sessione d'esame o in una successiva, è ammessa una sola volta e in tal caso al voto del nuovo progetto consegnato viene applicata una penale di 4/30 perché il gruppo può beneficiare della correzione del progetto precedentemente consegnato. Il progetto è superato se il voto è di almeno 18/30; il voto rimane valido, anche se la prova scritta od orale viene sostenuta ma non superata, fino alla terza sessione d'esame successiva a quella in cui il progetto viene consegnato.
La prova scritta, che può essere sostenuta individualmente solo dopo aver superato il progetto e cambia ad ogni appello d'esame, consiste in 8 domande più 2 esercizi da svolgere in 90 minuti. Essa è superata se il voto è di almeno 18/30; il voto rimane valido solo per l'appello d'esame in cui la prova scritta viene sostenuta.
La prova orale, che può essere sostenuta individualmente solo dopo aver superato il progetto e la prova scritta e si svolge nello stesso giorno della prova scritta, consiste in una discussione del progetto e della prova scritta più ulteriori domande. Se superata, essa determina un aggiustamento compreso tra -5/30 e 5/30 della media dei due precedenti voti, producendo così il voto finale.
Per ulteriori informazioni › www.sti.uniurb.it/bernardo/teaching/prog_logi_funz/
- Disabilità e DSA
Le studentesse e gli studenti che hanno registrato la certificazione di disabilità o la certificazione di DSA presso l'Ufficio Inclusione e diritto allo studio, possono chiedere di utilizzare le mappe concettuali (per parole chiave) durante la prova di esame.
A tal fine, è necessario inviare le mappe, due settimane prima dell’appello di esame, alla o al docente del corso, che ne verificherà la coerenza con le indicazioni delle linee guida di ateneo e potrà chiederne la modifica.
Informazioni aggiuntive per studentesse e studenti non Frequentanti
- Modalità didattiche
Come per frequentanti.
- Obblighi
Come per frequentanti.
- Testi di studio
Come per frequentanti.
- Modalità di
accertamento Come per frequentanti.
- Disabilità e DSA
Le studentesse e gli studenti che hanno registrato la certificazione di disabilità o la certificazione di DSA presso l'Ufficio Inclusione e diritto allo studio, possono chiedere di utilizzare le mappe concettuali (per parole chiave) durante la prova di esame.
A tal fine, è necessario inviare le mappe, due settimane prima dell’appello di esame, alla o al docente del corso, che ne verificherà la coerenza con le indicazioni delle linee guida di ateneo e potrà chiederne la modifica.
« torna indietro | Ultimo aggiornamento: 23/06/2024 |