Programowanie deklaratywne Artur Michalski Informatyka II rok Plan wykładu Wprowadzenie do języka Prolog Budowa składniowa i interpretacja programów prologowych Listy, operatory i operacje arytmetyczne Sterowanie mechanizmem nawrotów Predefiniowane procedury Styl i technika programowania w Prologu 1
Wprowadzenie do języka Prolog Przykład prostego programu w języku Prolog:» Rozszerzanie programu przez wprowadzanie reguł prologowych» Rekurencyjna definicja reguły j» ela ala robert jacek tomek ola iza 2
Prolog - język przetwarzania symbolicznego przeznaczony do rozwiązywania problemów dotyczących obiektów i relacji między nimi. Przykład relacji między obiektami: Tomek jest em Roberta. (tomek tomek, robert). robert tomek Wszystkie relacje dla naszego przykładu: (tomek tomek, robert). (tomek tomek,iza). (ela ela,robert). (robert robert,ala). (robert robert,ola). (ola ola,jacek). ela ala robert jacek tomek ola iza 3
Program prologowy składa się z klauzul. W naszym przykładzie klauzule definiują fakty, wskazujące, między którymi obiektami zachodzi relacja pokrewieństwa. (tomek tomek, robert). (tomek tomek,iza). (ela ela,robert). (robert robert,ala). (robert robert,ola). (ola ola,jacek). W Prologu moŝliwe jest formułowanie pytań dotyczących zdefiniowanych relacji. Przykładowe pytanie: Czy Robert jest em Ali??- (robert robert, ala). Yes ala? robert 4
Inne pytanie:?- (iza iza, ola). No Kolejne pytanie:?- (iza iza,, piotr). No ela ala robert jacek tomek ola? iza piotr? Inne pytanie:?- (iza iza, ola). No Kolejne pytanie:?- (iza iza,, piotr). No W Prologu, jeśli nie jest moŝliwa weryfikacja odpowiedzi w oparciu o zdefiniowane fakty, to odpowiedź brzmi No. 5
W Prologu moŝliwe jest formułowanie pytań szczegółowych. Przykładowe pytanie: Kto jest em Izy??- (X, iza). X = tomek iza? Odpowiedzi na pytanie szczegółowe moŝe być kilka. Przykładowe pytanie: Kto jest dzieckiem Roberta??- (robert robert,, X). X = ala; X = ola robert?? 6
Pytanie szczegółowe moŝe mieć węŝszy lub szerszy zakres. Przykładowe pytanie: Dla jakich X i Y, X jest em Y??- (X, Y). X = ela Y = robert; X = tomek Y = robert; X = tomek Y = iza;... W Prologu moŝna równieŝ formułować pytania złoŝone. Przykładowe pytanie: Kto jest babcią lub dziadkiem Jacka??- (Y,jacek jacek), (X,Y). X = robert Y = ola ela ala robert jacek tomek ola iza 7
JeŜeli zmieniamy porządek w pytaniu złoŝonym logiczny sens pytania pozostaje taki sam. Wariant 1:?- (Y,jacek jacek), (X,Y). Wariant 2:?- (X,Y), (Y,jacek jacek). Odpowiedź (taka sama): X = robert Y = ola Inne pytanie: Czy Ala i Ola mają wspólnego a??- (X,ala ala), (X,ola ola). X = robert ela ala robert jacek tomek ola iza 8
Podsumowanie przykładu: Prolog umoŝliwia prosty zapis relacji, takich jak,, poprzez definiowanie n-tek, n składających się z obiektów, które spełniają daną relację UŜytkownik moŝe w łatwy sposób formułować pytania dotyczące tych relacji Program prologowy składa się z klauzul Argumentami relacji mogą być: konkretne obiekty, nazywane atomami (takie jak tomek czy ala) ) lub ogólne obiekty, czyli zmienne (takie jak X czy Y) Podsumowanie przykładu (ciąg dalszy): Pytania składają się z jednego lub więcej celów.. Ciąg celów, taki jak: (X,ala ala), (X,ola ola) oznacza koniunkcje logiczną celów: X jest em Ali i X jest em Oli. Odpowiedź na pytanie moŝe być pozytywna lub negatywna, w zaleŝność od tego czy odpowiedni cel udało się osiągnąć, czy teŝ nie. Pozytywna odpowiedź oznacza, Ŝe cel został spełniony.. W przypadku przeciwnym cel jest niespełniony. JeŜeli jest kilka moŝliwych odpowiedzi na zadane pytanie, Prolog moŝe wygenerować kolejne na Ŝyczenie uŝytkownika. 9
Program prologowy moŝe zawierać równieŝ fakty, opisujące wybrane cechy obiektów.. Wykorzystujemy do tego celu tzw. relacje unarne. Przykładowo moŝe to być płeć osoby: kobieta(ela ela). ela mezczyzna(tomek tomek). mezczyzna(robert robert). kobieta(iza iza). kobieta(ala ala). ala kobieta(ola ola). mezczyzna(jacek jacek). robert jacek tomek ola iza Spróbujmy zdefiniować relację dziecko. Fakty : dziecko(robert robert,ela). dziecko(robert robert,tomek). dziecko(iza iza,tomek).... Wykorzystanie ogólnej zasady: Dla wszystkich X i Y, Y jest dzieckiem X, o ile X jest em Y. dziecko(y,x):- (X,Y). 10
Fakty Zawsze (bezwarunkowo) prawdziwe. Budowa reguły j: dziecko(y,x) :-: (X,Y). nagłówek ciało Reguły Prawdziwe, jeŝeli spełniony jest pewien warunek. Budowa reguły j (ciąg dalszy): dziecko(y,x) :-: nagłówek Część konkluzyjna albo Lewa strona reguły (X,Y). ciało Część warunkowa albo Prawa strona reguły 11
Reguły w działaniu Przykładowe pytanie:?- dziecko(iza iza,tomek). Brak bezpośrednich faktów powoduje odwołanie do reguł. Reguła jako rodzaj uogólnienia moŝe być zastosowana do konkretnych obiektów takich jak iza i tomek. UŜycie reguły wymaga zatem wykonania podstawień: X = tomek Y = iza Reguły w działaniu (ciąg dalszy): Wiązanie zmiennych X i Y daje przypadek szczególny reguły: dziecko(iza iza,tomek) ) :-: (tomek tomek,iza). Sprawdzenie części warunkowej - zastąpienie celu podcelem: (tomek tomek,iza). Weryfikacja podcelu: prawdziwy w oparciu o fakty. Wniosek: konkluzja reguły prawdziwa. Yes 12
Przykład innej reguły - matka: Dla wszystkich X i Y, X jest matką Y, o ile X jest em Y i X jest kobietą. matka(x,y) :-: (X,Y), kobieta(x). koniunkcja warunków X Y kobieta matka Inne reguły pokrewieństwa - babcia: Dla wszystkich X i Y, X jest babcią Y, o ile X jest em Z, Z jest em Y i X jest kobietą. babcia(x,y) :-: (X,Z), (Z,Y), Y kobieta(x). X Z kobieta babcia 13
Inne reguły pokrewieństwa - siostra: Dla wszystkich X i Y, X jest siostrą Y, o ile X i Y mają wspólnego a i X jest kobietą. kobieta siostra(x,y) :-: (Z,X), (Z,Y), kobieta(x). Z X Y siostra Przykładowe pytanie:?- siostra(ala ala,ola). Yes ela ala robert jacek tomek ola iza Przykładowe pytanie:?- siostra(x,ola ola). X = ala; X = ola 14
Przykładowe pytanie:?- siostra(ala ala,ola). Yes Poprawna reguła: siostra(x,y) :-: (Z,X), (Z,Y), kobieta(x), X\=Y. Przykładowe pytanie:?- siostra(x,ola ola). X = ala; X = ola Podsumowanie: Programy moŝna rozszerzać w prosty sposób poprzez definiowanie nowych klauzul WyróŜniamy trzy rodzaje klauzul: fakty, reguły i pytania Fakty opisują to, co jest zawsze, bezwarunkowo prawdziwe Reguły opisują to, czego prawdziwość zaleŝy od pewnego warunku Za pomocą pytań moŝna dowiedzieć się co jest prawdą lub fałszem 15
Podsumowanie (ciąg dalszy): Klauzula prologowa składa się z: nagłówka i ciała; ciało to lista celów oddzielonych przecinkami, które traktujemy jako koniunkcję Fakty to klauzule, które mają nagłówek i puste ciało; pytania posiadają tylko ciało; reguły mają zarówno nagłówek, jak i niepuste ciało W trakcie działania zmienne mogą być zamieniane przez inne obiekty; proces ten określamy mianem wiązania zmiennych Zakładamy, Ŝe wszystkie zmienne klauzuli są poprzedzone kwantyfikatorem uogólnionym Rekurencyjna definicja reguły Definicja relacji przodek X Z przodek Przodek bezpośredni X Z przodek Przykład przodka pośredniego 16
Rekurencyjna definicja reguły Pierwsza definicja relacji przodek: Dla wszystkich X i Y, X jest przodkiem Y, o ile X jest em Y. przodek(x,y) :-: (X,Y). X Y przodek Przodek bezpośredni Rekurencyjna definicja reguły Druga definicja relacji przodek: przodek(x,z) :-: (X,Y), (Y,Z). X Y Z przodek Przodek pośredni 17
Rekurencyjna definicja reguły Trzecia definicja relacji przodek: przodek(x,z) :-: (X,Y1), (Y1,Y2), (Y2,Z). X Y1 Y2 Z przodek Przodek pośredni Rekurencyjna definicja reguły Czwarta definicja relacji przodek: przodek(x,z) :-: (X,Y1), (Y1,Y2), (Y2,Y3), (Y3,Z). X Y1 Y2 Y3 przodek Z Przodek pośredni 18
Rekurencyjna definicja reguły Kolejna definicja relacji przodek: przodek(x,z) :-: (X,Y1), (Y1,Y2),... (Yn Yn,Z). X Y1 Y2... przodek Z Przodek pośredni Rekurencyjna definicja reguły Ostateczna definicja relacji przodek: X Dla wszystkich X i Z, X jest przodkiem Z, o ile Y X jest em Y i Y jest przodkiem Z. przodek(x,z) :-: (X,Y), przodek(y,z). przodek... przodek Z Przodek pośredni 19
Rekurencyjna definicja reguły Pełna definicja relacji przodek w Prologu: przodek(x,z) :-: (X,Z). %bezpośredni przodek(x,z) :-: (X,Y), %pośredni przodek(y,z). Programowanie z wykorzystaniem rekurencji jest podstawową metodą programowania w Prologu. Wprowadzenie do języka Prolog Podsumowanie: Programowanie w Prologu opiera się na definiowaniu relacji i zadawaniu pytań dotyczących relacji Program prologowy składa się z klauzul.. Mamy trzy rodzaje klauzul: fakty, reguły i pytania Relacje definiowane są za pomocą faktów, które mają postać n-tek zawierających obiekty, które relacje spełniają lub reguł, które je opisują Pytania dotyczące relacji przypominają zadawanie pytań w systemach baz danych; odpowiedzi składają się ze zbioru obiektów, spełniających cel zawarty w pytaniu 20
Literatura W.F. Clocksin,, C.S. Mellish, Prolog - programowanie,, Wydawnictwo Helion, Gliwice 2003 R.A. Kowalski, Logika w rozwiązywaniu zywaniu zadań, WNT, Warszawa 1989. E. Gatnar, K. Stapor, Prolog,, Wydawnictwo PLJ, Warszawa 1991. F. Kluźniak niak,, S. Szpakowicz, Prolog,, WNT, Warszawa, 1983. I. Bratko, Prolog programming for AI, Addison- Wesley 1990. 21