Lab 3 - Przemysław Juszczuk
Transkrypt
Lab 3 - Przemysław Juszczuk
Języki programowania deklaratywnego dr Przemysław Juszczuk Katedra Inżynierii Wiedzy laborki 3 dr Przemysław Juszczuk Języki programowania deklaratywnego Powtórka Utwórz program zawierający następujące reguły (wcześniej przygotuj odpowiednie fakty) jeśli X jest synem lub córką Y, to Y jest rodzicem X. jeśli Y jest synem lub córką X i X jest kobietą, to X jest matką Y. dwie osoby są rodzeństwem, jeśli mają tych samych rodziców. dr Przemysław Juszczuk Języki programowania deklaratywnego Unifikacja - uzgadnianie Dwa termy są zgodne, jeżeli można dokonać takiego podstawienia pod zmienne, że obydwa termy stają się identyczne. Uzgadnianie - zasady stałe są zgodne, jeśli są identyczne; zmienne są zgodne z dowolnym termem (nawet zawierającym inne zmienne); termy złożone są zgodne, jeśli ich funktory i argumenty są zgodne. dr Przemysław Juszczuk Języki programowania deklaratywnego Unifikacja Zadania X=Z. ala = jola. zaliczyl(student,programowanie) = zaliczyl(student,X). f(X,a) = f(a,X). je(kuba,pomidory) = je(Kto,Co). je(kuba, Co) = je (Osoba,pomidory). lubi(kuba,X) = lubi(X,zosia). f(X,Y) = f(A,B). f(X,Y) = f(A,A). f (X , a(b, c)) i f (d, a(Z , c)) ?. g (Z , f (A, 17, B), A, 17) i g (C , f (D, D, E ), C , E ). a(b, C , d(e, F , g (h, i, j))) i a(B, c, d(E , f , g (H, i, j))). punktX(A,B,C) = punktY(A,B,C). triangle(point(1,1),A,point(2,3))=triangle(X,point(4,Y),point(2,Z)). dr Przemysław Juszczuk Języki programowania deklaratywnego Podstawy arytmetyki w Prolog X =:= Y - X i Y są tą samą liczbą; X = \= Y - liczby są różne; X < Y - X mniejsze od Y; X =< Y - X jest mniejsze lub równe Y; X >= Y - x jest większe lub równe Y; is - służy do wyznaczania wartości, np. A is 3 + 5; A is 6/2; B is C D. Uwaga Operator nie powoduje wykonania operacji arytmetycznej. To inny zapis termu, a więc 1 + 2, to +(1,2). dr Przemysław Juszczuk Języki programowania deklaratywnego Piastowie - baza faktów wlada(mieszko1, 960, 992). wlada(boleslawChrobry,992,1025). wlada(mieszko2,1025,1032). wlada(bezprym, 1032,1033). wlada(kazimierzOdnowiciel,1034,1058). wlada(boleslawSzczodry,1058,1079). wlada(wladyslawHerman,1079,1102). Napisz regułę, która pozwoli sprawdzić, czy dany władca rządził w roku podanym roku: panowanie(X,Y). dr Przemysław Juszczuk Języki programowania deklaratywnego Czy X władał w danym roku? panowanie(X,Y) :- wlada(X,B,C), Y >= B, Y =< C. dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie Dana jest baza faktów zawierająca produkty spożywcze - ich nazwę oraz cenę. Napisz regułę, która pozwala sprawdzić, czy dla dwóch dowolnych produktów oraz posiadanej kwoty możliwe jest dokonanie zakupu. Jak wyglądałaby taka reguła dla 3 elementów w koszyku? produkt(maslo,3). produkt(ciasto,10). produkt(herbata,4). produkt(kawa,7). produkt(czekolada,3). dr Przemysław Juszczuk Języki programowania deklaratywnego koszyk(A,B,C) :- produkt(A,X), produkt(B,Y), D is (X+Y), C > D. koszykDuzy(A,B,C,D) :- produkt(A,X), produkt(B,Y), produkt(C,Z), E is (X+Y+Z), D > E. dr Przemysław Juszczuk Języki programowania deklaratywnego Inne operatory X - Y; X * Y; X / Y; X // Y - całkowity iloraz X przez Y. X mod Y reszta z dzielenia. dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie Zdefiniuj reguły pozwalające wyznaczyć wartość maksymalną dwóch liczb; Zdefiniuj reguły pozwalające wyznaczyć wartość minimalną trzech liczb. dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie Napisz predykat inkrementuj(X,Y), który przyjmuje wartość X jako wejściową, a na wyjściu zwraca wartość mniejszą o 1. Analogicznie przygotuj predykat dekrementuj(X,Y). dr Przemysław Juszczuk Języki programowania deklaratywnego inc(X , Y ) : −Y is X + 1. dr Przemysław Juszczuk Języki programowania deklaratywnego Ćwiczenie Napisz predykat absolutna(X,Y), który przyjmuje wartość X jako wejściową, a na wyjściu zwraca Y jako wartość bezwzględną z X. dr Przemysław Juszczuk Języki programowania deklaratywnego abs(X,Y) :- X >= 0, Y is X. abs(X,Y) :- X < 0, Y is X*(-1). Ćwiczenie W podobny sposób przygotuj predykat ”średnia”. W przypadku predykatu 3-arugmentowego, gdzie trzeci element to wartość średnia dwóch pierwszych elementów - co zwróci program po podstawieniu dla wszystkich trzech wartości stałych? dr Przemysław Juszczuk Języki programowania deklaratywnego