fmz sistemi basati su conoscenza esercizi prolog dott. fabio massimo zanzotto a.a. 2001-2002

28
FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

Upload: rosella-pugliese

Post on 01-May-2015

234 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Sistemi basati su conoscenzaEsercizi Prolog

Dott. Fabio Massimo Zanzotto

a.a. 2001-2002

Page 2: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Esercizi

FATTI:male(…).

female(…).

father(Father,Son).

mother(Mother,Son).

Page 3: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 4: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 5: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Esercizio

brother(X,Y).

X è fratello di Y.

brother(X,Y):-mother(Z,X),

mother(Z,Y),

male(X).

Page 6: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 7: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 8: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 9: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Esercizio

path(A,P,B):-line(A,P),line(P,B).

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.

Page 10: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Eserciziopath(A,P,B):-

line(A,P),line(P,B).

a

c

b

d

Ci sono due soluzioni possibili!!

Page 11: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Tipi di dato: associate ai termini

• Caratteri

• Interi

• Reali

• Stringhe

• Liste

Page 12: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Funzioni built-in

• Gestione I/Owrite(predicate)

tell(file_name)

told

• Gestione Regoleassert(fatto)

retract(fatto)

Page 13: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Operatori

• Operatori matematiciis : assegnamento

+ - * \

A is B + C.

• Comparazione=/= non uguale

Page 14: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 15: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 16: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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.

Page 17: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Esercizi

Membro della lista

member(Elemento,Lista).

vera se Elemento è un elemento della lista.

member(Elemento,[Elemento|_]).

member(Elemento,[_|Resto]):-

member(Elemento,Resto).

Page 18: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 19: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 20: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 21: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 22: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 23: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 24: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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

Page 25: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Esercizi

Lista equivalente senza duplicati

duplicates(A,B).

vera se A contiene una sola volta tutti gli elementi di B.

Page 26: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Riflessioni

\+ not

Implica la ricerca in tutto lo spazio delle soluzioni per affermare che sia vero.

Page 27: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

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.

Page 28: FMZ Sistemi basati su conoscenza Esercizi Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

FMZ

Esercizi

somma([],0).

somma([El|Rest],N):-

lenght(Rest,M),

N is El + M.