Sztuczna Intelignecja - Prolog 2

41
Listy Arytmetyka Struktury Problem malpy :-) Operatory Postscriptum Sztuczna Inteligencja i Systemy Ekspertowe Prolog 2 Aleksander Pohl http://apohllo.pl/dydaktyka/ai Wy˙ zsza Szkola Zarz ˛ adzania i Bankowo´ sci 17 marca 2009 Aleksander Pohl WSZiB Prolog 2

Transcript of Sztuczna Intelignecja - Prolog 2

Page 1: Sztuczna Intelignecja - Prolog 2

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

Page 2: Sztuczna Intelignecja - 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

Page 3: Sztuczna Intelignecja - 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

Page 4: Sztuczna Intelignecja - 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

Page 5: Sztuczna Intelignecja - Prolog 2

Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum

Operatory

◮ sklejanie .(Head, Tail)

◮ rozdzielanie L = [Head | Tail]

Aleksander Pohl WSZiB

Prolog 2

Page 6: Sztuczna Intelignecja - 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

Page 7: Sztuczna Intelignecja - 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

Page 8: Sztuczna Intelignecja - 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

Page 9: Sztuczna Intelignecja - 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

Page 10: Sztuczna Intelignecja - 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

Page 11: Sztuczna Intelignecja - 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

Page 12: Sztuczna Intelignecja - 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

Page 13: Sztuczna Intelignecja - 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

Page 14: Sztuczna Intelignecja - 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

Page 15: Sztuczna Intelignecja - 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

Page 16: Sztuczna Intelignecja - 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

Page 17: Sztuczna Intelignecja - 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

Page 18: Sztuczna Intelignecja - 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

Page 19: Sztuczna Intelignecja - 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

Page 20: Sztuczna Intelignecja - 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

Page 21: Sztuczna Intelignecja - 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

Page 22: Sztuczna Intelignecja - 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

Page 23: Sztuczna Intelignecja - 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

Page 24: Sztuczna Intelignecja - 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

Page 25: Sztuczna Intelignecja - Prolog 2

Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum

Aleksander Pohl WSZiB

Prolog 2

Page 26: Sztuczna Intelignecja - 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

Page 27: Sztuczna Intelignecja - 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

Page 28: Sztuczna Intelignecja - 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

Page 29: Sztuczna Intelignecja - 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

Page 30: Sztuczna Intelignecja - 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

Page 31: Sztuczna Intelignecja - 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

Page 32: Sztuczna Intelignecja - 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

Page 33: Sztuczna Intelignecja - 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

Page 34: Sztuczna Intelignecja - 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

Page 35: Sztuczna Intelignecja - 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

Page 36: Sztuczna Intelignecja - 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

Page 37: Sztuczna Intelignecja - 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

Page 38: Sztuczna Intelignecja - 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

Page 39: Sztuczna Intelignecja - 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

Page 40: Sztuczna Intelignecja - 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

Page 41: Sztuczna Intelignecja - Prolog 2

Listy Arytmetyka Struktury Problem małpy :-) Operatory Postscriptum

Dziekuje!

Aleksander Pohl WSZiB

Prolog 2