La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Il primo passo: I basilari del Prolog Fabio Massimo Zanzotto (slides realizzate da Andrea Turbati)

Presentazioni simili


Presentazione sul tema: "Il primo passo: I basilari del Prolog Fabio Massimo Zanzotto (slides realizzate da Andrea Turbati)"— Transcript della presentazione:

1 Il primo passo: I basilari del Prolog Fabio Massimo Zanzotto (slides realizzate da Andrea Turbati)

2 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Termini Predicati Clausole (Fatti e Regole) Programma logico Elementi del Prolog

3 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Atomi: nomi che iniziano con lettera MINUSCOLA, sequenze di caratteri tra, numeri preceduti da caratteri –andrea –Corso di Prolog –c1p8 Numeri –12345 Variabili: nomi che iniziano con lettera MAIUSCOLA o con _ –Tizio –_andrea –_ Termini composti –somma(1, 2, X) –1+2 Termini

4 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Espressi tramite la notazione f(t 1, …, t n ) f è un atomo che prende il nome di funtore t 1, …, t n sono gli argomenti e sono dei termini (predicato f con n argomenti, ha arità n) Predicati

5 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Le clausole: fatti e regole I fatti sono regole senza corpo Fatti: parent(ben, jim). friend(luke, daisy). Regole: grandparent(X,Y):- parent(X,Z), parent(Z,Y). Clausole

6 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Head :- Body. significa che affinché la Head sia vera deve essere vero il Body (e quindi i predicati che lo compongono) Nel Body ci sono 1 o più predicati separati da, (and) o da ; (or) Ogni regola termina con. Regole

7 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Un fatto è un predicato seguito da. Un fatto può essere composto da più termini –amico(fratello(alice, X), bob). Fatti

8 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Insieme di regole/fatti Risponde alle query con o true o false e assegna dei valori alle variabili Programma logico

9 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata parent(anne, bill). parent(anne, charlie). parent(bill, donnie). grandparent(X,Y):- parent(X,Z), parent(Z,Y). Esempio: Famiglia

10 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Query: ?- parent(anne, bill). Risposta: true Query ?- parent(anne, X). Risposta: X=bill (premo ; ) X = charlie (premo ; ) false Esempio: Famiglia

11 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Query: ?- parent(X, Y). Risposta: X=anne, Y=bill (premo ; ) X=anne, Y=charlie (premo ; ) X=bill, Y=donnie (premo ; ) false Esempio: Famiglia

12 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Prolog cerca nel proprio database di regole e fatti, quelli che soddisfano la nostra query, istanziando le variabili Ogni variabile, una volta istanziata (unificata), non può assumere un secondo valore (a differenza dei linguaggi classici di programmazione, come Java, C, C++, ecc) Esecuzione del programma

13 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Dati i fatti: –parent( pam, bob). –parent( bob, tom). –parent( tom, ann). –parent( bob, jerry). –female(pam). –male(bob). –male(tom). –female(ann). –male(jerry). Esempio E le regole father(X,Y):- male(X), parent(X,Y). mother(X,Y):- female(X), parent(X,Y). ?- mother(ann,X).

14 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata E le regole father(X,Y):- male(X), parent(X,Y). mother(X,Y):- female(X), parent(X,Y). Esempio

15 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Che risposta ho alle seguenti interrogazioni? –?- mother(X,Y). –?- father(X,Y). –?- mother(X,ann). –?- father(X,ann). –?- mother(ann,X). Esempio

16 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata SWI-Prolog –http://www.swi-prolog.org/http://www.swi-prolog.org/ –ha la licenza Lesser GNU Public License –contiene un basilare editor di sviluppo (poco più che un semplice editor di test) –Funziona su windows, linux e mac Linterprete Prolog

17 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata edit. –apre leditor per modificare/aggiungere fatti e regole al file in esame consult('nome_file'). –carica un file con i suoi dati reconsult(nome_file). –ricarica il file con i suoi dati trace / notrace. –abilita / disabilita la stampa di tutti i passaggi intermedi (molto utile per seguire lo svolgersi del programma) Comandi utili

18 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Vedere lesempio contenuto in prolog-1.pl Provare le query ( * è 1,2,3 e 4): –pred*(pam, ann). –pred*(pam, andrea). Ordine dei predicati nelle regole

19 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Nel sito cè la documentazione sulle varie regole già presenti in prologhttp://www.swi-prolog.org/pldoc/ Simboli usati: –+ termine che deve essere già istanziato –- termine che viene istanziato dalla regola –? termine che può o meno essere già istanziato Documentazione sul prolog

20 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata member(?Elem, ?List) True if Elem is a member of List. The SWI-Prolog definition differs from the classical one. Our definition avoids unpacking each list element twice and provides determinism on the last element get(+Stream, -Char) Read the next non-blank character from Stream. Esempi documentazione

21 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Scrivere un programma Prolog che rappresenta un grafo tramite il fatto edge(A,B) per indicare che A e B sono connessi Interrogare il programma realizzato per avere tutti i nodi raggiungibili partendo da b: –?- path(b, X). Esercizio a bc d e f

22 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata È un linguaggio di programmazione logica È un linguaggio dichiarativo Si basa su una restrizione delle logica del primo ordine (Horn Clauses) Prolog

23 © F.M.ZanzottoLogica per la Programmazione e la Dimostrazione Automatica University of Rome Tor Vergata Indica cosa serve per arrivare alla soluzione desiderata, ma non il come, cioè limplementazione utilizzata Si contrappone ai linguaggi imperativi e procedurali (Java, C, C++, ecc) Linguaggio dichiarativo


Scaricare ppt "Il primo passo: I basilari del Prolog Fabio Massimo Zanzotto (slides realizzate da Andrea Turbati)"

Presentazioni simili


Annunci Google