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