1 / 23

Il primo passo: I basilari del Prolog

Il primo passo: I basilari del Prolog. Fabio Massimo Zanzotto ( slides realizzate da Andrea Turbati). Elementi del Prolog. Termini Predicati Clausole (Fatti e Regole) Programma logico. Termini.

venice
Download Presentation

Il primo passo: I basilari del Prolog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Elementi del Prolog • Termini • Predicati • Clausole (Fatti e Regole) • Programma logico

  3. Termini • 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

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

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

  6. Regole • 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 .

  7. Fatti • Un fatto è un predicato seguito da . • Un fatto può essere composto da più termini • amico(fratello(alice, X), bob).

  8. Programma logico • Insieme di regole/fatti • Risponde alle query con o true o false e assegna dei valori alle variabili

  9. Esempio: Famiglia parent(anne, bill). parent(anne, charlie). parent(bill, donnie). grandparent(X,Y):- parent(X,Z), parent(Z,Y).

  10. Esempio: Famiglia • Query: ?- parent(anne, bill). • Risposta: true • Query ?- parent(anne, X). • Risposta: X=bill (premo ; ) X = charlie (premo ; ) false

  11. Esempio: Famiglia • Query: ?- parent(X, Y). • Risposta: X=anne, Y=bill (premo ; ) X=anne, Y=charlie (premo ; ) X=bill, Y=donnie (premo ; ) false

  12. Esecuzione del programma • 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)

  13. Esempio • 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). • E le regole father(X,Y):- male(X), parent(X,Y). mother(X,Y):- female(X), parent(X,Y). • ?- mother(ann,X).

  14. Esempio • E le regole father(X,Y):- male(X), parent(X,Y). mother(X,Y):- female(X), parent(X,Y).

  15. Esempio • Che risposta ho alle seguenti interrogazioni? • ?- mother(X,Y). • ?- father(X,Y). • ?- mother(X,ann). • ?- father(X,ann). • ?- mother(ann,X).

  16. L’interprete Prolog • 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

  17. Comandi utili • 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)

  18. Ordine dei predicati nelle regole • Vedere l’esempio contenuto in prolog-1.pl • Provare le query ( * è 1,2,3 e 4): • pred*(pam, ann). • pred*(pam, andrea).

  19. Documentazione sul prolog • 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

  20. Esempi documentazione • 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.

  21. Esercizio • 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). b c a d e f

  22. Prolog • È un linguaggio di programmazione logica • È un linguaggio dichiarativo • Si basa su una restrizione delle logica del primo ordine (HornClauses)

  23. Linguaggio dichiarativo • 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)

More Related