Sztuczna Inteligencja - Prolog 3
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,429
On Slideshare
3,311
From Embeds
118
Number of Embeds
4

Actions

Shares
Downloads
31
Comments
0
Likes
0

Embeds 118

http://apohllo.pl 56
http://www.apohllo.pl 44
http://www.slideshare.net 17
http://www.slideee.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Sztuczna Inteligencja i Systemy Ekspertowe Prolog 3 Aleksander Pohl http://apohllo.pl/dydaktyka/ai Wy˙ sza Szkoła Zarzadzania i Bankowo´ ci z ˛ s 23 marca 2009 Aleksander Pohl WSZiB Prolog 3
  • 2. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Plan prezentacji Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Aleksander Pohl WSZiB Prolog 3
  • 3. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Plan prezentacji Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Aleksander Pohl WSZiB Prolog 3
  • 4. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Typy operatorów infiksowe ◮ np. 5 + 10, a ∨ b prefiksowe ◮ np. - 5, ¬ a postfiksowe ◮ np. 5, 6 + (notacja Łukasiewicza) Aleksander Pohl WSZiB Prolog 3
  • 5. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Dyrektywy op(N,T,Name). ◮ s´ N – liczbowa warto´ c priorytetu operatora ◮ T – typ operatora ◮ Name – nazwa atomu ◮ Aleksander Pohl WSZiB Prolog 3
  • 6. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Priorytety s´ Im ni˙ szy warto´ c priorytetu (im wy˙ szy priorytet), tym operator z z wia˙ e silniej. ˛z term, bad´ wyra˙ enie w nawiasach: 0 ˛z z ◮ priorytet struktury: priorytet funktora głównego ◮ s´ x – warto´ c priorytetu silnie mniejsza od warto´ ci s ◮ priorytetu operatora głównego s´ y – warto´ c priorytetu mniejsza bad´ równa warto´ ci ˛z s ◮ priorytetowi operatora głównego Aleksander Pohl WSZiB Prolog 3
  • 7. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Typy operatorów infiksowe ◮ xfx, xfy, yfx prefiksowe ◮ fx, fy postfiksowe ◮ xf, yf Aleksander Pohl WSZiB Prolog 3
  • 8. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Przykład a-b-c ◮ (a-b)-c – tradycyjna interpretacja ◮ definiujemy jako yfx ◮ a-b priorytet równy warto´ ci operatora, czyli y ma taki s sam priorytet jak operator główny definiujemy jako xfy (błednie) ˛ ◮ a-b priorytet równy warto´ ci operatora, ale x nie mo˙ e s z mie´ priorytetu takiego jak operator główny c Aleksander Pohl WSZiB Prolog 3
  • 9. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Przykład not jako fx ◮ not(not p) jako fy ◮ not not p Aleksander Pohl WSZiB Prolog 3
  • 10. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Predefiniowane operatory op(1200,xfx,[ :- , -> ] ) ◮ op(1100,xfy,’;’) ◮ op(1000,xfy,’,’) ◮ op(900,fy, not ) ◮ op(700,xfx,[ is,=,=,=:=,== ]) ◮ op(500,yfx,[ +,- ]) ◮ op(400,yfx,[ *,/,//,mod ]) ◮ op(200, xfx , ** ) ◮ op(200,fy,-) ◮ Aleksander Pohl WSZiB Prolog 3
  • 11. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Przykład (1) ¬(A ∨ B) ↔ ¬A ∨ ¬B ◮ equiv(not( and(A,B)),or(not(A),not(B))) ◮ op( 800,xfx, <===>). ◮ op(700,xfy,v). ◮ op(600,xfy,&). ◮ op(500,fy,∼). ◮ ∼(A & B) <===> ∼A v ∼B. ◮ Aleksander Pohl WSZiB Prolog 3
  • 12. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Przykład (2) op(300,xfx, plays). ◮ op(200,xfy,and). ◮ jimmy plays football and squash. ◮ Who plays football and squash. ◮ Who = jimmy ◮ jimmy plays What. ◮ What = football and squash ◮ Aleksander Pohl WSZiB Prolog 3
  • 13. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Plan prezentacji Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Aleksander Pohl WSZiB Prolog 3
  • 14. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Wstep ˛ ´ Wej´ cie inne ni˙ w formie pytan logincznych (np. w jezyku s z ˛ ◮ naturalnym) Formatowanie wyj´ cia s ◮ Współpraca z innymi urzadzeniami peryferyjnymi ni˙ ˛ z ◮ terminal Dwa otwarte strumienie: ◮ ´ bie˙ acy strumien wej´ ciwy ˛z ˛ s ◮ ´ bie˙ acy strumien wyj´ ciowy z˛ s ◮ domy´ lnie – terminal user s ◮ Aleksander Pohl WSZiB Prolog 3
  • 15. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Operacje na wej´ ciu i wyj´ ciu s s see – zamiana aktualnego wej´ cia na inne: s ◮ see(file1) ◮ read_from_file(Info) ◮ see(user) ◮ tell – zamiana aktualnego wyj´ cia na inne s ◮ Aleksander Pohl WSZiB Prolog 3
  • 16. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Operacje na wej´ ciu i wyj´ ciu s s Zamykanie strumieni: ◮ seen ◮ told ◮ end_of_file – koniec pliku ◮ get, put – pojedyncze znaki ◮ read, write – termy ◮ Aleksander Pohl WSZiB Prolog 3
  • 17. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Operacje na wej´ ciu s read(X) – odczyt termu z bie˙ acego strumienia wej´ cia z˛ s ◮ X zmienna – podstawienie warto´ ci s ◮ brak dopasowania – fail ◮ nie ma nawrotu w celu przeczytania nastepnego elementu ˛ ◮ Aleksander Pohl WSZiB Prolog 3
  • 18. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Operacje na wyj´ ciu s write(X) – zapis termu do bie˙ acego strumienia wyj´ cia z˛ s ◮ tab(N) – wypisanie N spacji ◮ nl – przej´ cie do nowej linii s ◮ Aleksander Pohl WSZiB Prolog 3
  • 19. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Schemat przetwarzania pliku processfile :- read(Term), ◮ process(Term). process(end_of_file) :- !. ◮ process(Term) :- ◮ treat(Term), processfile. Aleksander Pohl WSZiB Prolog 3
  • 20. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Przetwarzanie pliku – przykład błedny! ˛ cube :- read(stop), !. ◮ cube :- read(N), ◮ C is N*N*N, write(C), cube. Aleksander Pohl WSZiB Prolog 3
  • 21. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Przetwarzanie pliku – przykład poprawny cube :- ◮ write(’Next Item, please:’), read(X),process(X). process(stop) :- !. ◮ process(N) :- C is N*N*N, ◮ write(’Cube of ’), write(N), write(’ is ’), write(C),nl,cube. Aleksander Pohl WSZiB Prolog 3
  • 22. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Wczytywanie i wypisywanie znaków put(C) – wypisanie pojedynczego znaku ◮ get(C) – wczytanie pojedynczego, widocznego znaku ◮ (nie-spacji) get0(C) – wczytanie pojedynczego znaku ◮ Aleksander Pohl WSZiB Prolog 3
  • 23. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Przykład – operacje na znakach squeeze :- ◮ get0(C), put(C), dorest(C). dorest(46) :- !. %46 ASCII „.” ◮ dorest(32) :- !, get(C), put(C), ◮ dorest(C). %32 ASCII „ ” dorest(Letter) :- squeeze. ◮ Aleksander Pohl WSZiB Prolog 3
  • 24. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Operacje na znakach name(A, L) – zamiana termu na kody znaków ◮ name(zx232, [ 122, 120, 50, 51, 50 ]) ◮ Aleksander Pohl WSZiB Prolog 3
  • 25. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Wczytywanie plików consult(F) ◮ compile(F) ◮ consult([file1, file2, queens]) ◮ Aleksander Pohl WSZiB Prolog 3
  • 26. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Plan prezentacji Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Aleksander Pohl WSZiB Prolog 3
  • 27. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Testowanie typu var(X) – zmienna o warto´ ci nieprzypisanej s ◮ nonvar(X) ◮ s´ atom(X) – warto´ c atomowa ◮ integer(X) – liczba całkowita ◮ float(X) – liczba zmiennopozycyjna ◮ number(X) – liczba ◮ s´ atomic(X) – liczba lub warto´ c atomowa ◮ compound(X) – struktura ◮ Aleksander Pohl WSZiB Prolog 3
  • 28. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Testowanie typu – przykład (1) count(_,[],0). ◮ count(A,[A|L],N) :- !, ◮ count(A,L,N1),N is N1 +1. count(A,[_|L],N) :- count(A,L,N). ◮ count(a,[a,b,a,a],Nb). ◮ Nb=3 ◮ Aleksander Pohl WSZiB Prolog 3
  • 29. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Testowanie typu – przykład (2) count1(_,[],0). ◮ count1(A,[B|L],N) :- ◮ atom(B),A=B,!, count1(A,L,N1), N is N1 +1 ; count1(A,L,N). Aleksander Pohl WSZiB Prolog 3
  • 30. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Testowanie typu – przykład (3) count(a,[a,b,X,Y],Nb). ◮ Nb=3 count1(a,[a,b,X,Y],Nb). ◮ Nb=1 Aleksander Pohl WSZiB Prolog 3
  • 31. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Predykat =.. Term =.. L ◮ f(a,b) =.. L ◮ L=[f,a,b] ◮ T=..[rectangle,4,5] ◮ T=rectangle(4,5) ◮ Aleksander Pohl WSZiB Prolog 3
  • 32. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Predykat =.. – przykład (1) enlarge(Type(Par),F,Type(Par1)) :- ◮ Par1 is Par * F. square(side), triangle(s1,s2,s3), ◮ rectangle(s1,s2) Aleksander Pohl WSZiB Prolog 3
  • 33. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Predykat =.. – przykład (2) enlarge(Fig,F,Fig1) :- ◮ Fig=..[Type,Params], multiply_list(Params,F,Params1), Fig1=..[Type,Params1]. multiply_list([],_,[]). ◮ multiply_list( [X|L],F,[X1|L1]) :- ◮ X1 is X*F, multiply_list(L,F,L1). Aleksander Pohl WSZiB Prolog 3
  • 34. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum arg i functor functor(D,date,3). ◮ D=date(_5,_6,_7). ◮ arg(1,D,29) ◮ arg(2,D,june) ◮ arg(3,D,1982) ◮ D = date(29,june,1982). ◮ Aleksander Pohl WSZiB Prolog 3
  • 35. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Porównywanie termów s´ X=Y – równo´ c termów ◮ X is E – ewaluacja warto´ ci liczbowej s ◮ s´ X=:=Y – równo´ c warto´ ci liczbowych s ◮ s´ X=/=Y – nierówno´ c warto´ ci liczbowych s ◮ s´ T1==T2 – identyczno´ c termów ◮ s´ T1/==T2 – nieidentyczno´ c termów ◮ X@<Y – porównywanie słownikowe ◮ @<, @<=, @>=, @> ◮ Aleksander Pohl WSZiB Prolog 3
  • 36. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Zarzadzanie asercjami ˛ assert(X) – dodanie asercji ◮ retract(X) – usuniecie asercji ˛ ◮ asserta(X) – dodanie asercji na poczatku ˛ ◮ ´ assertz(X) – dodanie asercji na koncu ◮ assert(rodzic(jan, anna)) ◮ Aleksander Pohl WSZiB Prolog 3
  • 37. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Plan prezentacji Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Aleksander Pohl WSZiB Prolog 3
  • 38. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Caching solve(problem1, Solution), ◮ asserta(solve(problem1,Solution)). fib(1,1):- !. ◮ fib(2,1):- !. ◮ fib(N,M) :- ◮ N1 is N-1, fib(N1,M1), N2 is N-2, fib(N2,M2),M is M1 + M2, asserta(fib(N,M)). Aleksander Pohl WSZiB Prolog 3
  • 39. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Sterowanie ! – odciecie ˛ ◮ ´ fail – cel, który zawsze konczy sie niepowodzeniem ˛ ◮ ´ true – cel, który zawsze konczy sie sukcesem ˛ ◮ not(P) – negacja (przez odciecie!) ˛ ◮ call(P) – wywołanie procedury ◮ repeat – potwórzenie: ◮ repeat. ◮ repeat:-repeat. ◮ Aleksander Pohl WSZiB Prolog 3
  • 40. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Powtórzenie – przykład doSquare :- ◮ repeat, read(X), (X = stop, ! ; Y is X*X, write(Y), fail). Aleksander Pohl WSZiB Prolog 3
  • 41. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Zbieranie wyników bagof(X,P,L) – L lista obiektów X spełniajacych ˛ ◮ predykat P setof(X,P,L) – L posortowana lista obiektów ◮ X spełniajacych predykat P ˛ ˛˙ findall(X,P,L) – podobny do bagof, z ta ró˙ nica, ze ˛z ◮ dla wyniku istotna jest tylko zmienna X Aleksander Pohl WSZiB Prolog 3
  • 42. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum bagof – przykład (1) age(peter,7). ◮ age(ann,5). ◮ age(pat,8). ◮ age(tom,5). ◮ bagof(C,age(C,5),L). ◮ L=[ann,tom] ◮ Aleksander Pohl WSZiB Prolog 3
  • 43. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum bagof – przykład (2) bagof(C,age(C,A),L). ◮ A=7, L=[peter] ◮ A=5, L=[ann,tom] ◮ A=8, L=[pat] ◮ Aleksander Pohl WSZiB Prolog 3
  • 44. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum bagof, setof, findall – przykład bagof(C,A^age(C,A),L). ◮ L=[peter, ann , pat, tom] setof(C,A^age(C,A),ChildList). ◮ ChildList = [ ann, pat, peter , tom ] setof(A,C^age(C,A),AgeList). ◮ AgeList = [ 5,7,8 ] findall(C,age(C,A),L). ◮ L=[peter, ann , pat, tom] Aleksander Pohl WSZiB Prolog 3
  • 45. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Optymalizacja ostatniego wywołania p(...) :- .... ◮ p(...) :- .... ◮ P(...) :- ...., !, p(...). ◮ Zmiana rekursji na iteracje ˛ ◮ Aleksander Pohl WSZiB Prolog 3
  • 46. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Akumulator – problem małpy canget(state(_,_,_,has),[]). ◮ canget(State1,[Move| L]) :- ◮ print(Move), write(’ ’), move( State1, Move, State2), canget( State2, L ). Aleksander Pohl WSZiB Prolog 3
  • 47. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Wykorzystanie akumulatora Brak tail recursion: sumlist([],0). ◮ sumlist([First|Rest],Sum) :- ◮ sumlist(Rest,Sum0), Sum is X + Sum0. Wykorzystanie tail recursion: sumlist(L,S) :- sumlist(L,0,S). ◮ sumlist([],S,S). ◮ sumlist([First|Rest],PartialSum,TotalSum) ◮ :- NewPartialSum is PartialSum + First, sumlist(Rest, NewPartialSum, TotalSum). Aleksander Pohl WSZiB Prolog 3
  • 48. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Tablice functor(A, f, 100). ◮ A = f(_,_,_,....,_) ◮ arg(60,f,1). ◮ W jezyku C: f[60]=1 ˛ ◮ arg(60,f,X). ◮ W jezyku C: X=f[60] ˛ ◮ Aleksander Pohl WSZiB Prolog 3
  • 49. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Listy ró˙ nicowe (1) z conc([], L, L). ◮ conc([X|L1],L2,[X|L3]):- ◮ conc(L1,L2,L3). Aleksander Pohl WSZiB Prolog 3
  • 50. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Listy ró˙ nicowe (2) z [a,b,c] → [a,b,c|T]-T ◮ [] → L-L ◮ conc(A1-Z1,Z1-Z2,A1-Z2). ◮ Aleksander Pohl WSZiB Prolog 3
  • 51. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Listy ró˙ nicowe (3) z ... czyli conc(L1,L2,L3). ◮ ?- conc([a,b,c|T1]-T1,[d,e|T2]-T2,L). ◮ Aleksander Pohl WSZiB Prolog 3
  • 52. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Plan prezentacji Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Aleksander Pohl WSZiB Prolog 3
  • 53. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Materiały zródłowe ´ L.Sterling, E.Shapiro - „The Art Of Prolog” ◮ Ivan Bratko - „Prolog – Programming For Artificial ◮ Intelligence” Slajdy zostały przygotowane za zgoda˛ ◮ dr. Michała Korzyckiego na podstawie jego wykładu. Aleksander Pohl WSZiB Prolog 3
  • 54. Operatory Operacjy wyj´ cia/wej´ cia s s Predykaty wbudowane Techniki programowania Postscriptum Dziekuje! ˛ ˛ Aleksander Pohl WSZiB Prolog 3