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

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

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

Page 1: 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)

Page 2: 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

Page 3: 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”

• 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

Page 4: 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”

• 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

Page 5: 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”

• 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

Page 6: 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”

• 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

Page 7: 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”

• Un fatto è un predicato seguito da .

• Un fatto può essere composto da più termini– amico(fratello(alice, X), bob).

Fatti

Page 8: 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”

• Insieme di regole/fatti

• Risponde alle query con o true o false e assegna dei valori alle variabili

Programma logico

Page 9: 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”

parent(anne, bill).

parent(anne, charlie).

parent(bill, donnie).

grandparent(X,Y):-

parent(X,Z),

parent(Z,Y).

Esempio: Famiglia

Page 10: 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”

• Query:?- parent(anne, bill).

• Risposta:true

• Query?- parent(anne, X).

• Risposta:X=bill

(premo ; )

X = charlie

(premo ; )

false

Esempio: Famiglia

Page 11: 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”

• Query:?- parent(X, Y).

• Risposta:X=anne, Y=bill

(premo ; )

X=anne, Y=charlie

(premo ; )

X=bill, Y=donnie

(premo ; )

false

Esempio: Famiglia

Page 12: 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”

• 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

Page 13: 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”

• 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).

Page 14: 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”

• E le regolefather(X,Y):-

male(X),

parent(X,Y).

mother(X,Y):-

female(X),

parent(X,Y).

Esempio

Page 15: 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”

• Che risposta ho alle seguenti interrogazioni?

– ?- mother(X,Y).

– ?- father(X,Y).

– ?- mother(X,ann).

– ?- father(X,ann).

– ?- mother(ann,X).

Esempio

Page 16: 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”

• 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

Page 17: 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”

• 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

Page 18: 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”

• 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

Page 19: 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”

• 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

Page 20: 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”

• 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

Page 21: 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”

• 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

Page 22: 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”

• È un linguaggio di programmazione logica

• È un linguaggio dichiarativo

• Si basa su una restrizione delle logica del primo ordine (Horn Clauses)

Prolog

Page 23: 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”

• 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