Il primo passo: I basilari del Prolog Fabio Massimo Zanzotto (slides realizzate da Andrea Turbati)
-
Upload
sofia-esposito -
Category
Documents
-
view
215 -
download
2
Transcript of Il primo passo: I basilari del Prolog Fabio Massimo Zanzotto (slides realizzate da Andrea Turbati)
Il primo passo:I basilari del Prolog
Fabio Massimo Zanzotto
(slides realizzate da Andrea Turbati)
© F.M.Zanzotto Logica per la Programmazione e la Dimostrazione Automatica
University of Rome “Tor Vergata”
• Termini
• Predicati
• Clausole (Fatti e Regole)
• Programma logico
Elementi del Prolog
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica per la Programmazione e la Dimostrazione Automatica
University of Rome “Tor Vergata”
• Espressi tramite la notazione f(t1, …, tn )
• f è un atomo che prende il nome di funtore
• t1, …, tn sono gli argomenti e sono dei termini (predicato f con n argomenti, ha arità n)
Predicati
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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 regolefather(X,Y):-
male(X),parent(X,Y).
mother(X,Y):-female(X),parent(X,Y).
?- mother(ann,X).
© F.M.Zanzotto Logica per la Programmazione e la Dimostrazione Automatica
University of Rome “Tor Vergata”
• E le regolefather(X,Y):-
male(X),
parent(X,Y).
mother(X,Y):-
female(X),
parent(X,Y).
Esempio
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica per la Programmazione e la Dimostrazione Automatica
University of Rome “Tor Vergata”
• SWI-Prolog
– 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
L’interprete Prolog
© F.M.Zanzotto Logica per la Programmazione e la Dimostrazione Automatica
University of Rome “Tor Vergata”
• edit.– apre l’editor 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
© F.M.Zanzotto Logica per la Programmazione e la Dimostrazione Automatica
University of Rome “Tor Vergata”
• Vedere l’esempio contenuto in prolog-1.pl
• Provare le query ( * è 1,2,3 e 4):– pred*(pam, ann).– pred*(pam, andrea).
Ordine dei predicati nelle regole
© F.M.Zanzotto Logica per la Programmazione e la Dimostrazione Automatica
University of Rome “Tor Vergata”
• Nel sito http://www.swi-prolog.org/pldoc/ c’è la documentazione sulle varie regole già presenti in prolog
• 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
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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
ab c
de
f
© F.M.Zanzotto Logica 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
© F.M.Zanzotto Logica 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è l’implementazione utilizzata
• Si contrappone ai linguaggi imperativi e procedurali (Java, C, C++, ecc)
Linguaggio dichiarativo