Title: Sistemi basati su conoscenza Esercizi Prolog
1Sistemi basati su conoscenzaEsercizi Prolog
- Dott. Fabio Massimo Zanzotto
- a.a. 2001-2002
2Esercizi
- FATTI
- male().
- female().
- father(Father,Son).
- mother(Mother,Son).
3Esercizio
- 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).
4Esercizio
- 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).
5Esercizio
- brother(X,Y).
- X è fratello di Y.
- brother(X,Y)-
- mother(Z,X),
- mother(Z,Y),
- male(X).
6Esercizio
- 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).
7Esercizio
- 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
).
8Esercizio
- 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)- li
ne(A,B).
9Esercizio
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).
10Esercizio
path(A,P,B)- line(A,P), line(P,B).
b
a
d
c
Ci sono due soluzioni possibili!!
11Tipi di dato associate ai termini
- Caratteri
- Interi
- Reali
- Stringhe
- Liste
12Funzioni built-in
- Gestione I/O
- write(predicate)
- tell(file_name)
- told
- Gestione Regole
- assert(fatto)
- retract(fatto)
13Operatori
- Operatori matematici
- is assegnamento
- - \
- A is B C.
- Comparazione
- / non uguale
14Le liste
- Definizione
- a1,a2,,an
- Accedere ad una lista HeadTail
- 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
15Esercizi 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
16Esercizi
Lunghezza lenght(Lista,N). vera se N è il numero
di elementi della lista.
lenght(,0). lenght(ElementoResto,N)- lengh
t(Resto,M), N is M 1.
17Esercizi
Membro della lista member(Elemento,Lista). vera
se Elemento è un elemento della lista.
member(Elemento,Elemento_). member(Elemento,_
Resto)- member(Elemento,Resto).
18Esercizi
Concatenazione tra liste append(L1,L2,L12). vera
se L12 è la concatenazione di L1 e L2.
append(,L2,L2). append(ElResto,L2,ElL12)
- append(Resto,L2,L12).
19Esercizi
Restanti Ultimo elemento last_element(List,Rest,La
stEl). vera se List è una lista e LastEl il suo
ultimo elemento e Rest il resto rella lista.
last_element(El,,El). last_element(ElRest,
ElRestB,Last)- last_element(Rest,RestB,Last).
20Esercizi
Reverse di una lista reverse(A,A_Reversed). vera
se A è rivoltata rispetto a A_Reversed.
reverse(,). reverse(AARest,B)- last_elem
ent(B,BRest,A), reverse(ARest,BRest).
21Esercizi
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(AARest,C,B)- reverse
(ARest,AC,B).
22Esercizi
Intersezione di due insiemi intersect(A,B,AIB). ve
ra se AIB è lintersezione di A e B.
intersect(A,,). intersect(,B,). intersec
t(A,BBR,BAIB)- memeber(B,A), intersect(A,
BR,AIB).
23Esercizi
Unione di due insiemi union(A,B,AUB). vera se AUB
è lunione di A e B.
union(A,,A). union(A,BBR,BAIB)- interse
ct(A,BR,AIB).
24Esercizi
Verifica se una lista è un insieme set(A). vera
se A è un insieme, ovvero A non contiene elementi
duplicati.
set(). set(AB)- \member(A,B), set(B).
25Esercizi
Lista equivalente senza duplicati duplicates(A,B).
vera se A contiene una sola volta tutti gli
elementi di B.
26Riflessioni
- \ not
- Implica la ricerca in tutto lo spazio delle
soluzioni per affermare che sia vero. -
27Esercizi
Media average(ListaDiNumeri,Media). vera se Media
è la lista dei numeri in ListaDiNumeri.
average(ListaDiNumeri,Media)- somma(ListaDiNumer
i,N), lenght(ListaNumeri,M), Media is N/M.
28Esercizi
somma(,0). somma(ElRest,N)- lenght(Rest,M),
N is El M.