Docente: Prof. G.F. Rossi (e-mail: gianfranco.rossi at unipr.it)
Introduzione alla programmazione dichiarativa. Definizione, vantaggi, linguaggi di programmazione dichiarativa, forme di programmazione dichiarativa - Principali caratteristiche dei linguaggi di programmazione dichiarativa.
Un linguaggio per la programmazione dichiarativa: il Prolog. Cenni allo sviluppo del Prolog. - Variabili e tipi di dato (termini semplici e composti). Clausole e programmi (sintassi). - Semantica. Interpretazione logica. Interpretazione procedurale. Invertibilita' predicati. - Unificazione e sostituzione. - Semantica operazionale. Derivazione. Albero di derivazione SLD. Insieme di successo. - Nondeterminismo e strategie di ricerca. Backtracking. Incompletezza. - Strutture dati: liste. Rappresentazione. Operazioni su liste. Stringhe. - Rappresentazione e manipolazione numeri. - Controllo backtracking ("cut"). Negazione per fallimento (cenni). - Programmazione dichiarativa in Prolog. Variabili logiche e unificazione. Strutture dati parzialmente specificate. Nondeterminismo e ricorsione. - Predicati built-in (extra-logici). Input-output: di termini, di caratteri, su file. Modifica dinamica del programma (cenni). Manipolazione di termini (cenni). Insieme delle soluzioni ('setof'). - Sviluppo ed esecuzione di programmi in SWI-Prolog.
Programmazione logica a vincoli. Limitazioni del Prolog (dichiarativita',
efficienza). - Nozione di vincolo e di risolutore. - Il CLP. Programma,
computazione CLP, risoluzione di vincoli (propagazione e controllo di consistenza).
- Un esempio di CLP: CLP(FD). Vincoli FD. Risoluzione vincoli FD ("arc-consistency").
CLP(FD) in SWI-Prolog.
L. CONSOLE, E. LAMMA, P. MELLO, M. MILANO: Programmazione logica
e Prolog (II edizione), UTET Libreria, 1997, Anno ristampa 2006, pp.
432.