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