SlideShare a Scribd company logo
1 of 54
Download to read offline
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Operatory         Operacjy wyj´ cia/wej´ cia
                              s        s       Predykaty wbudowane   Techniki programowania   Postscriptum




                                               Dziekuje!
                                                  ˛   ˛




Aleksander Pohl                                                                                    WSZiB
Prolog 3

More Related Content

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Sztuczna Inteligencja - Prolog 3

  • 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