1 / 28

Sistemi basati su conoscenza Esercizi Prolog

Sistemi basati su conoscenza Esercizi Prolog. Dott. Fabio Massimo Zanzotto a.a. 2001-2002. Esercizi. FATTI: male(…). female(…). father( Father,Son ). mother( Mother,Son ). Esercizio. part_of_parent(X,Y) . X è uno dei genitori di Y. part_of_parent(X,Y) :- father(X,Y).

polly
Download Presentation

Sistemi basati su conoscenza Esercizi 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. Sistemi basati su conoscenzaEsercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

  2. Esercizi FATTI: male(…). female(…). father(Father,Son). mother(Mother,Son).

  3. Esercizio part_of_parent(X,Y). X è uno dei genitori di Y. part_of_parent(X,Y):- father(X,Y). part_of_parent(X,Y):- mother(X,Y).

  4. Esercizio parents(X,Y,Z). X,Y sono i genitori di Z. parents(X,Y,Z):- father(X,Z), mother(Y,Z). parents(X,Y,Z):- mother(X,Z), father(Y,Z).

  5. Esercizio brother(X,Y). X è fratello di Y. brother(X,Y):- mother(Z,X), mother(Z,Y), male(X).

  6. Esercizio aunt(X,Y). X è zia di Y. aunt(X,Y):- female(X), mother(Z,Y), sister(X,Z). aunt(X,Y):- female(X), father(Z,Y), sister(X,Z).

  7. Esercizio a,b,c,d… sono punti in un piano e i fatti sono del tipo line(X,Y). Definire una regola che stabilisca se quello in memoria è un triangolo. triangle:- line(A,B), line(B,C), line(C,A). Proviamo sui fatti: line(a,b). line(a,c). line(c,b).

  8. Esercizio a,b,c,d… sono punti in un piano e i fatti sono del tipo line(X,Y). Definire una regola che stabilisca se quello in memoria è un triangolo. triangle:- connected(A,B), connected(B,C), connected(C,A). connected(A,B):- line(B,A). connected(A,B):- line(A,B).

  9. Esercizio a,b,c,d… sono punti in un piano e i fatti sono del tipo line(X,Y). Definire una regola path(X,P,Y). che sia vera quando esiste un percorso di due passi che tocchi il punto P. path(A,P,B):- line(A,P), line(P,B).

  10. Esercizio path(A,P,B):- line(A,P), line(P,B). b a d c Ci sono due soluzioni possibili!!

  11. Tipi di dato: associate ai termini • Caratteri • Interi • Reali • Stringhe • Liste

  12. Funzioni built-in • Gestione I/O write(predicate) tell(file_name) told • Gestione Regole assert(fatto) retract(fatto)

  13. Operatori • Operatori matematici is : assegnamento + - * \ A is B + C. • Comparazione =/= non uguale

  14. Le liste • Definizione [a1,a2,…,an] • Accedere ad una lista [Head¦Tail] • Esempi di head-tail LIST Head Tail [a,b,c] a [b,c] [[a,b,c],d,e] [a,b,c] [d,e] [a] a [] [] nessun valore

  15. Esercizi sulle liste • Contare gli elementi di una lista • member • append: unire due liste • rivoltare una lista • Usiamo la lista per modellare gli insiemi: • unione • intersezione

  16. Esercizi Lunghezza lenght(Lista,N). vera se N è il numero di elementi della lista. lenght([],0). lenght([Elemento|Resto],N):- lenght(Resto,M), N is M + 1.

  17. Esercizi Membro della lista member(Elemento,Lista). vera se Elemento è un elemento della lista. member(Elemento,[Elemento|_]). member(Elemento,[_|Resto]):- member(Elemento,Resto).

  18. Esercizi Concatenazione tra liste append(L1,L2,L12). vera se L12 è la concatenazione di L1 e L2. append([],L2,L2). append([El|Resto],L2,[El|L12]):- append(Resto,L2,L12).

  19. Esercizi Restanti Ultimo elemento last_element(List,Rest,LastEl). vera se List è una lista e LastEl il suo ultimo elemento e Rest il resto rella lista. last_element([El],[],El). last_element([El|Rest],[El|RestB],Last):- last_element(Rest,RestB,Last).

  20. Esercizi Reverse di una lista reverse(A,A_Reversed). vera se A è rivoltata rispetto a A_Reversed. reverse([],[]). reverse([A|ARest],B):- last_element(B,BRest,A), reverse(ARest,BRest).

  21. Esercizi Reverse di una lista reverse(A,A_Reversed). vera se A è rivoltata rispetto a A_Reversed. reverse([],[]). reverse(A,B):- reverse(A,[],B). reverse([],A,B). reverse([A|ARest],C,B):- reverse(ARest,[A|C],B).

  22. Esercizi Intersezione di due insiemi intersect(A,B,AIB). vera se AIB è l’intersezione di A e B. intersect(A,[],[]). intersect([],B,[]). intersect(A,[B|BR],[B|AIB]):- memeber(B,A), intersect(A,BR,AIB).

  23. Esercizi Unione di due insiemi union(A,B,AUB). vera se AUB è l’unione di A e B. union(A,[],A). union(A,[B|BR],[B|AIB]):- intersect(A,BR,AIB).

  24. Esercizi Verifica se una lista è un insieme set(A). vera se A è un insieme, ovvero A non contiene elementi duplicati. set([]). set([A|B]):- \+member(A,B), set(B).

  25. Esercizi Lista equivalente senza duplicati duplicates(A,B). vera se A contiene una sola volta tutti gli elementi di B.

  26. Riflessioni \+ not Implica la ricerca in tutto lo spazio delle soluzioni per affermare che sia vero.

  27. Esercizi Media average(ListaDiNumeri,Media). vera se Media è la lista dei numeri in ListaDiNumeri. average(ListaDiNumeri,Media):- somma(ListaDiNumeri,N), lenght(ListaNumeri,M), Media is N/M.

  28. Esercizi somma([],0). somma([El|Rest],N):- lenght(Rest,M), N is El + M.

More Related