Upload
aleksander-pohl
View
2.134
Download
0
Embed Size (px)
Citation preview
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Sztuczna Inteligencja i Systemy EkspertoweProlog 2
Aleksander Pohlhttp://apohllo.pl/dydaktyka/ai
Wyzsza Szkoła Zarzadzania i Bankowosci
17 marca 2009
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Plan prezentacji
Listy
Arytmetyka
Struktury
Problem małpy :-)
Operatory
Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Plan prezentacji
Listy
Arytmetyka
Struktury
Problem małpy :-)
Operatory
Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Listy
◮ [ann, tom, tennis]
◮ „głowa” – head: ann◮ „ogon” – tail: [tom, tennis]
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Operatory
◮ sklejanie .(Head, Tail)
◮ rozdzielanie L = [Head | Tail]
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Testowanie obecnosci (1)
Element listy◮ member(X, [X | Tail]).
◮ member(X, [Head | Tail]) :-member(X, Tail).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Testowanie obecnosci (2)
Element listy z wykorzystaniem odciecia◮ member(X, [X | Tail]) :- !.
◮ member(X, [Head | Tail]) :-member(X, Tail).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Konkatenacja
◮ conc([],L,L).
◮ conc([X | L1], L2, [X | L3]) :-conc(L1, L2, L3).
Dekompozycja◮ conc(L1, L2, [a, b, c]).
Wyszukiwanie◮ conc(Przed, [c | Po], [a, b, c, d, e, f]).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Usuwanie i dodawania elementu
Usuwanie elementu◮ del(X, [X | Tail],Tail).
◮ del(X, [Y | Tail],[Y,Tail1]) :-del(X, Tail, Tail1).
Dodawanie elementu◮ insert( X, List, BiggerList) :-del( X, BiggerList, List).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Permutacje
Permutacje dla zbioru {a, b, c}:◮ (a, b, c)
◮ (a, c, b)
◮ (b, a, c)
◮ (c, a, b)
◮ (b, c, a)
◮ (c, b, a)
W Prologu◮ permutation([],[]).
◮ permutation( [X | L ],P) :-permutation(L,L1), insert(X,L1,P).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Plan prezentacji
Listy
Arytmetyka
Struktury
Problem małpy :-)
Operatory
Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Obliczanie wartosci
◮ X = 1 + 2.
◮ X = 1 + 2
◮ X is 1 + 2.
◮ X = 3.
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Porównywanie liczb
◮ X>Y
◮ X<Y
◮ X>=Y
◮ X=<Y
◮ X=:=Y (równosc)◮ X=/=Y (nierównosc)
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Przykład porównywania liczb
◮ 1 + 2 =:= 2 + 1.
◮ yes
◮ 1 + 2 = 2 + 1.
◮ no
◮ 1 + A = B + 2.
◮ A = 2
◮ B = 1
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Przykład – obliczanie długosci listy
◮ length1( [] , 0 ).
◮ length1( [ _ | Tail ], N) :-N = 1 + N1,length1( Tail, N1 ).
◮ length1( [ _ | Tail ], 1 + N) :-length1( Tail, N ).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Obliczanie długosci – wyniki
◮ ?- length1([a,b,c,d],N)
◮ N = 1 + (1 + (1 + (1 + 0)))
◮ ?- length1([a,b,c,d],N), Length is N.
◮ N = 1 + (1 + (1 + (1 + 0)))
◮ Length = 4
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Obliczanie długosci – rozwiazanie poprawne
◮ length( [] , 0 ).
◮ length( [ _ | Tail ], N) :-length( Tail, N1 ),N is 1 + N1.
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Plan prezentacji
Listy
Arytmetyka
Struktury
Problem małpy :-)
Operatory
Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Predykaty jako struktury
◮ date(5, may, 2000).
◮ date – funktor główny
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Struktura złozona
family(person(tom, fox, date(7,may,1960),works(bbc,4200)),person(ann, fox, date(9, may,1961),unemployed),[person(pat, fox, date(5, may,1983),unemployed),person(jim, fox, date(11, may,1985),unemployed)]).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Rodzina – zapytania (1)
◮ family(_,_,[ _,_,_]).
◮ family(person( _, fox, _ , _ ), _ ,_).
◮ husband(X) :-family(X, _ ,_).
◮ wife(X) :-family(_,X,_).
◮ child(X) :-family(_,_,Children),member(X, Children).
◮ exists(Person) :-husband(Person);wife(Person);child(Person).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Rodzina – zapytania (2)
◮ dateofbirth(person(_,_,Date,_),Date).
◮ salary(person(_,_,_,works(_,S)),S).salary(person(_,_,_,unemployed),0).
◮ exists(person(Name,Surname,_,_)).
◮ child(X), dateofbirth(X,date(_,_,2000)).
◮ exists(Person),dateofbirth(Person, date(_,_,Year)),Year<1960, salary(Person,Salary),Salary<8000.
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Rodzina – zapytania (3)
◮ total([],0).
◮ total([Person|List], Sum) :-salary(Person,S),total(List, Rest),Sum is S+Rest.
◮ family(Husband, Wife, Children),total([Husband,Wife|Children],Income).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Plan prezentacji
Listy
Arytmetyka
Struktury
Problem małpy :-)
Operatory
Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Ruchy małpy (1)
◮ move(state(middle,onbox,middle,hasnot),grasp,state(middle,onbox,middle,has)).
◮ move(state(P,onfloor,P,H),climb,state(P,onbox,P,H)).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Ruchy małpy (2)
◮ move(state(P1,onfloor,P1,H),push(P1,P2),state(P2, onfloor, P2, H)).
◮ move(state( P1, onfloor, B, H),walk(P1,P2),state(P2, onfloor, B, H)).
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Cel małpy
◮ canget( state(_,_,_,has)).
◮ canget( State1 ) :-move( State1 , Move , State2),canget(State2), print(Move), write(’ ’).
◮ ?- canget(state(atdoor, onfloor, atwindow,hasnot))
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Plan prezentacji
Listy
Arytmetyka
Struktury
Problem małpy :-)
Operatory
Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Typy operatorów
◮ infiksowenp. 5 + 10, a ∨ b
◮ prefiksowenp. - 5, ¬ a
◮ postfiksowenp. 5, 6 + (notacja Łukasiewicza)
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Dyrektywy
◮ op(N,T,Name).◮ N — priorytet operatora◮ T – typ operatora◮ Name – nazwa atomu
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Priorytety
Im nizszy wartosc priorytetu (im wyzszy priorytet), tym operatorwiaze silniej.
◮ term, badz wyrazenie w nawiasach: 0◮ priorytet struktury: priorytet funktora głównego◮ x – wartosc priorytetu silnie mniejsza od wartosci
priorytetu operatora głównego◮ y – wartosc priorytetu mniejsza badz równa wartosci
priorytetowi operatora głównego
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Typy operatorów
◮ infiksowexfx, xfy, yfx
◮ prefiksowefx, fy
◮ postfiksowexf, yf
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Przykład
◮ a-b-c
◮ (a-b)-c – tradycyjna interpretacja◮ definiujemy jako yfxa-b priorytet równy wartosci operatora, czyli y ma takisam priorytet jak operator główny
◮ definiujemy jako xfy (błednie)a-b priorytet równy wartosci operatora, ale x nie mozemiec priorytetu takiego jak operator główny
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Przykład
not
◮ jako fxnot(not p)
◮ jako fynot not p
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory 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 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory 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 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory 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 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Plan prezentacji
Listy
Arytmetyka
Struktury
Problem małpy :-)
Operatory
Postscriptum
Aleksander Pohl WSZiB
Prolog 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory 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 2
Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum
Dziekuje!
Aleksander Pohl WSZiB
Prolog 2