Lab 2 - Przemysław Juszczuk

Transkrypt

Lab 2 - Przemysław Juszczuk
Języki programowania deklaratywnego
dr Przemysław Juszczuk
Katedra Inżynierii Wiedzy
laborki 2
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Zmienne - i zapytania
Symboliczne przedstawianie nazw obiektów, które nie są w danej chwili
znane.
Zmienne
?- czyta(maria, X) - X jest zmienną nieukonkretnioną - zatem
wyświetlone zostaną elementy, które pasują do postawionego pytania.
Zmienne anonimowe
?- czyta( , ?) - interesuje nas, czy ktoś w ogóle czyta gazetę. Nie jest
istotne - kto.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Szybkie powtórzenie - fakty
Utwórz program zawierający następujące fakty:
Michał lubi psy.
Adam jest wysoki.
Adam jest ojcem Kuby i Michała.
Szybkie powtórzenie - SWI Prolog
zona(X,mieszko2).
syn(X,Y).
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Podstawowe elementy języka
Program - zbiór definicji predykatów (kolejność nie jest istotna);
Procedura - ciąg klauzul definiujących predykat (opis relacji).
Kolejność klauzul w procedurze jest istotna;
Klauzula - fakt lub reguła.
Podstawy
write(’ala ma kota’).
halt.
% jakiś komentarz w kodzie.
consult(’nazwaBazy.pl’).
więcej niż jeden wynik- y - koniec, n - następny wynik.
pwd. - sprawdzenie bieżącego katalogu.
cd. - przejście katalog wyżej.
working directory(CWD,’sciezka’)
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Ćwiczenie
Przygotuj przykładowy zestaw faktów.
lubi(kuba,zosia).
lubi(zosia,tomek).
lubi(tomek,marek).
lubi(kuba,magda).
Pytania
Czy Zosia lubi Tomka?
Kto lubi Tomka?
Kogo lubi Kuba?
listing(lubi). - informacje o danym predykacie.
emcs.
Reguła - podstawy
Dodajmy do naszych faktów: lubiaSieNawzajem(X,Y) :- lubi(Y,X),
lubi(X,Y).
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Budowanie reguł
W języku prolog reguła składa się z głowy i treści połączonych przy
pomocy :- (odpowiednik słowa ”jeżeli”). Reguła zakończona jest kropką.
Reguły - przykład
lubi(rafal, kinga) :- lubi(kinga, Z) , lubi(rafal, Z). - Rafał lubi Kingę,
jeżeli Kinga i Rafał lubią tę samą rzecz.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Zadanie
Utwórz program zawierający następujące fakty:
Ania lubi koty;
Marek jest niski;
Marcin jest studentem;
Zosia dała Adamowi klucz;
Edward jest ojcem Maćka i Ewy;
Arek podróżuje pociągiem z Warszawy do Częstochowy;
Toyota, BMW, Skoda, to marki samochodów osobowych.
Do powyższej bazy faktów dopisz kilka przykładowych pytań.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Zadanie 2
Zdefiniuj drzewo genealogiczne swojej rodziny. W razie potrzeby dopisz
dodatkowe osoby tak, aby możliwe było zdefiniowanie następujących
reguł:
matka(X,Y);
ojciec(X,Y);
rodzenstwo(X,Y);
maz(X,Y);
zona(X,Y);
brat(X,Y);
siostra(X,Y);
ciotka(X,Y);
wujek(X,Y);
dziadek(X,Y);
wnuczek(X,Y);
przodek(X,Y)
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Zadanie 3
Do bazy faktów z zadania drugiego przygotuj pytania (wykorzystaj
operatory and, or oraz not \+):
Wyświetl wszystkie osoby;
Wyświetl wszystkie kobiety;
Wyświetl wszystkich mężczyzn;
Wyświetl wszystkie kobiety, które mają rodzeństwo;
Wyświetl wszystkich dziadków;
Wyświetl kobiety, które nie są matkami.
dr Przemysław Juszczuk
Języki programowania deklaratywnego
Rysunek: Połączenie pomiędzy miastami
Zadanie 4
Zdefiniuj regułę ”zniżka”, która obowiązuje, kiedy pasażer przesiada się
dokładnie raz pomiędzy miastami. Skorzystaj z reguł sąsiedztwa, oraz
wcześniej odpowiednie fakty.
dr Przemysław Juszczuk
Języki programowania deklaratywnego

Podobne dokumenty