Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Sistemi basati su conoscenza Esercizi Prolog
Dott. Fabio Massimo Zanzotto a.a
2
Esercizi FATTI: male(…). female(…). father(Father,Son).
mother(Mother,Son).
3
Esercizio X è uno dei genitori di Y. part_of_parent(X,Y).
father(X,Y). mother(X,Y).
4
Esercizio X,Y sono i genitori di Z. parents(X,Y,Z). parents(X,Y,Z):-
father(X,Z), mother(Y,Z). mother(X,Z), father(Y,Z).
5
Esercizio X è fratello di Y. brother(X,Y). brother(X,Y):- mother(Z,X),
mother(Z,Y), male(X).
6
Esercizio X è zia di Y. aunt(X,Y). aunt(X,Y):- female(X), mother(Z,Y),
sister(X,Z). father(Z,Y),
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). 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 b a d c Ci sono due soluzioni possibili!! 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 Gestione Regole write(predicate)
tell(file_name) told Gestione Regole assert(fatto) retract(fatto)
13
Operatori Operatori matematici Comparazione =/= non uguale
is : assegnamento + - * \ A is B + C. Comparazione =/= non uguale
14
Le liste Definizione Accedere ad una lista [Head¦Tail]
[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
member(Elemento,Lista).
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
last_element(List,Rest,LastEl).
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
reverse(A,A_Reversed).
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
reverse(A,A_Reversed).
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
average(ListaDiNumeri,Media).
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.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.