Lab 5 - Przemysław Juszczuk
Transkrypt
Lab 5 - Przemysław Juszczuk
Języki programowania deklaratywnego dr Przemysław Juszczuk Katedra Inżynierii Wiedzy laborki 5 dr Przemysław Juszczuk Języki programowania deklaratywnego Powtórka Obiekty - jego opis i relacje jakim podlega obiekt; Termy - stałe, zmienne, struktury (termy złożone); Termy złożone - obiekty złożone z innych obiektów; Klauzule - fakty i reguły; Reguły - zbiór warunków, jakie muszą być spełnione (ciało reguły prawa część wyrażenia), aby cel był spełniony (cel, czyli głowa - lewa część wyrażenia); Unifikacja - proces dopasowywania - każda zmienna po uzgodnieniu miała tę samą wartość (wyjątek to zmienne anonimowe); Rekurencja - wywołanie funkcji przez samą siebie; Predykaty wbudowane - wczytywanie danych z klawiatury, pobieranie danych, wypisywanie na ekran; Co jeszcze Listy; Rekurencja w listach; Mechanizm rezolucji. dr Przemysław Juszczuk Języki programowania deklaratywnego Listy Lista - ciąg uporządkowanych elementów. Listy - tablice. [] - lista o długości zero (nil). Lista o długości n składa się z głowy i ogona o długosci n − 1. Zatem głowa to pierwszy element listy, a wszystkie pozostałe elementy należą do ogona. dr Przemysław Juszczuk Języki programowania deklaratywnego Rysunek: Lista jako drzewo dr Przemysław Juszczuk Języki programowania deklaratywnego Listy [1, 2, 3, 4] - lista złożona z 4 elementów; [1, 2, 3, [ala, kot]] - lista list. [a] - lista złożona z elementu a. [H|T ] - wyróżnienie głowy (head) i ogona (tail) w liście; [H|T ] = [1, 2, 3, 4] - czyli H = 1 i T = [2, 3, 4]. dr Przemysław Juszczuk Języki programowania deklaratywnego Przykłady list [a, b, c] - głowa - a, ogon - b,c. [] - lista pusta. Brak głowy i ogona. [[bury , kot], mruczy ] - [bury , kot] - głowa, mruczy -ogon. [bury , [kot, mruczy ]] - bury - głowa, [kot, mruczy ] -ogon. dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie Określ głowę i ogon podanych list: [a, b, c]. [a]. []. [[the, cardinal], [pulled, [off ]], [each, [plum, coloured], shoe]] Listy i jeszcze o uzgadnianiu [X , Y , Z ] - [jan, lubi, ryby ]. [kot] - [X |Y ]; (X = kot, Y = []). dr Przemysław Juszczuk Języki programowania deklaratywnego Jeszcze o listach Przynależność elementu do listy: nalezy(X,[X|_]). nalezy(X,[_|Yogon]) :- nalezy(X,Yogon). ?- nalezy(a, [a,b,c]). albo wersja wbudowana member(X, [X|T]). member(X, [H|T]) :- member(X, T). dr Przemysław Juszczuk Języki programowania deklaratywnego Jeszcze o listach Zliczanie elementów listy: dlugosc([],0). dlugosc([_|Ogon],Dlug) :dlugosc(Ogon,X), Dlug is X+1. ?- dlugosc([a,b,c,d],X) Sklejanie list: klejListy([],X,X). klejListy([X|Lista1],Lista2,[X|Lista3]) :klejListy(Lista1,Lista2,Lista3). dr Przemysław Juszczuk Języki programowania deklaratywnego Rysunek: Konkatenacja append(List1, List2, Result) :List1 = [Head1|Tail1], Result = [Head1|Result’] append(Tail1, List2, Result’). dr Przemysław Juszczuk Języki programowania deklaratywnego Jeszcze o listach ?- klejListy([a,b,c,d],[c,d,e,f],X). ?- klejListy([a,b,c],Wynik,[c,d,e]). ?- klejListy([a,b],X,[a,b,c,d]). ?- klejListy(A,B,[a,b,c,d,e]). ?- klejListy([1,2,3],[a,b,c],X). ?- klejListy([1,2,3],[a(e),b(f),c(d,g)],X). dr Przemysław Juszczuk Języki programowania deklaratywnego Jeszcze o listach Dodawanie elementów: dodaj(X,L,[X|L]). ?- dodaj(a,[c,d],X). Usuwanie elementów: usun(X,[X|Reszta],Reszta). usun(X,[Y|Ogon],[Y|Reszta]) :usun(X,Ogon,Reszta). ????- usun(a,[a,b,a,c,a,a],X). usun(a,[a,b,c,d],X). usun(c,[a,b,c,d],X). usun(c,X,[a,b,c,d]). ?- usun(1,X,[a,b,c,d]). dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie Napisz predykat, który wypisuje elementy listy (a co z wypisaniem listy tak, aby każdy element znalazł się w nowej linii? - nl). dr Przemysław Juszczuk Języki programowania deklaratywnego my_write([]). my_write([X|R]):- write(X),my_write(R). % oraz my_write([]). my_write([X|R]):- write(X),nl,my_write(R). dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie Napisz predykat umożliwiający wyznaczenie liczby elementów listy: size([],0). size([H|T],N) :- size(T,N1), N is N1+1. Ćwiczenie Na podstawie powyższego programu napisz program sumujący elementy z listy. dr Przemysław Juszczuk Języki programowania deklaratywnego Sumowanie elementów listy sumuj([X],X). sumuj([H|T],S):- sumuj(T,ST), S is ST + H. i teraz: sumuj([a,b,c,d],X). dr Przemysław Juszczuk Języki programowania deklaratywnego Unifikacja - powtórka [a, d, z, c] i [H|T ]. [apple, pear , grape] i [A, pear |Rest] [a|Rest] i [a, b, c] [a, []] i [A, B|Rest] [One] i [two|[]] [one] i [Two] [a, b, X ] i [a, b, c, d] dr Przemysław Juszczuk Języki programowania deklaratywnego Jeszcze o listach Odwracanie listy: odwroc([],[]). odwroc([H|T],L) :odwroc(T,R), sklej(R,[H],L). ?- odwroc([a,b,c,d],X). ?- odwroc([a,b,c,d],[d,c,b,a]). dr Przemysław Juszczuk Języki programowania deklaratywnego Listy zagadka(X, A, ?- zagadka(a, ?- zagadka(b, ?- zagadka(X, ?- zagadka(X, B) :- member(X, A), member(X, [b, c, a], [p, a, l]). [b, l, u, e], [y, e, l, l, o, [r, a, p, i, d], [a, c, t, i, [w, a, l, n, u, t], [c, h, e, dr Przemysław Juszczuk B). w]). o, n]). r, r, y]). Języki programowania deklaratywnego Ćwiczenia Napisz predykaty: pierwszyNaLiscie(X,Y). drugiNaLiscie(X,Y). ostatniNaLiscie(X,Y). sumaElementowListy(X,W). sumaDodatnichElementowListy(X,W). maksymalnyLista(X,W). odwrocListe(X,Y). dr Przemysław Juszczuk Języki programowania deklaratywnego Kod ASCII a metoda put X = ’a’, put(X). X = ’ala’, put(X). - oczekujemy pojedynczego znaku. put(65),put(66),put(67). - kod ASCII Ćwiczenie Napisz program, który pozwoli wypisać na ekran wszystkie samogłoski. dr Przemysław Juszczuk Języki programowania deklaratywnego