prolog. programowanie pełna wersja.pdf

(7463 KB) Pobierz
887628654.001.png
4
Prolog. Programowanie
Typowe zastosowania odci8cia.................................................................................80
Potwierdzanie wyboru reguły.............................................................................80
U5ycie odci8cia z predykatem fail ......................................................................84
Ko7czenie generowania mo5liwych rozwi4za7 i ich sprawdzanie ..........................86
Niebezpiecze7stwa wynikaj4ce ze stosowania odci8cia ..............................................89
Rozdział 5. Wej&cie i wyj&cie.............................................................................91
Czytanie i pisanie termów........................................................................................92
Czytanie termów...............................................................................................92
Pisanie termów .................................................................................................93
Czytanie i pisanie znaków .......................................................................................96
Czytanie znaków...............................................................................................96
Pisanie znaków.................................................................................................97
Wczytywanie zda7..................................................................................................98
Czytanie z plików i pisanie do plików.....................................................................101
Otwieranie i zamykanie strumieni.....................................................................102
Zmiana bie54cego strumienia wej+ciowego i wyj+ciowego..................................103
Konsultowanie................................................................................................104
Deklarowanie operatorów......................................................................................105
Rozdział 6. Predykaty wbudowane ...................................................................107
Wprowadzanie nowych klauzul..............................................................................107
Sukces i pora5ka...................................................................................................109
Klasyfikacja termów .............................................................................................110
Przetwarzanie klauzul jako termów ........................................................................111
Tworzenie składników struktur i si8ganie do nich ....................................................114
Wpływ na nawracanie ...........................................................................................118
Tworzenie celów zło5onych...................................................................................119
Równo+%..............................................................................................................122
Wej+cie i wyj+cie..................................................................................................122
Obsługa plików.....................................................................................................124
Wyliczanie wyra5e7 arytmetycznych......................................................................124
Porównywanie termów..........................................................................................126
Badanie działania Prologu .....................................................................................127
Rozdział 7. Przykładowe programy ...................................................................129
Sortowany słownik w formie drzewa......................................................................129
Przeszukiwanie labiryntu.......................................................................................132
Wie5e Hanoi.........................................................................................................135
Program magazynowy...........................................................................................136
Przetwarzanie list..................................................................................................137
Zapis i przetwarzanie zbiorów................................................................................140
Sortowanie...........................................................................................................142
U5ycie bazy danych..............................................................................................145
random ..........................................................................................................145
gensym ..........................................................................................................146
findall ............................................................................................................147
Przeszukiwanie grafów..........................................................................................149
Odsiej Dwójki i odsiej Trójki.................................................................................153
Ró5niczkowanie symboliczne ................................................................................155
Odwzorowywanie struktur i przekształcanie drzew..................................................157
Przetwarzanie programów .....................................................................................160
Literatura .............................................................................................................163
Spis treci
5
Rozdział 8. Usuwanie błdów w programach prologowych.................................165
Układ programów .................................................................................................166
Typowe bł8dy.......................................................................................................168
@ledzenie programu...............................................................................................171
@ledzenie i punkty kontrolne..................................................................................177
Sprawdzanie celu ............................................................................................179
Sprawdzanie przodków....................................................................................180
Zmiana poziomu +ledzenia...............................................................................181
Zmiana sposobu spełnienia celu........................................................................182
Inne opcje ......................................................................................................183
Podsumowanie ...............................................................................................184
Poprawianie bł8dów..............................................................................................184
Rozdział 9. U-ycie reguł gramatycznych w Prologu ...........................................187
Parsowanie...........................................................................................................187
Problem parsowania w Prologu ..............................................................................190
Notacja reguł gramatyki ........................................................................................194
Dodatkowe argumenty ..........................................................................................196
Dodatkowe warunki..............................................................................................199
Podsumowanie .....................................................................................................201
Przekształcanie j8zyka na logik8.............................................................................202
Ogólniejsze zastosowanie reguł gramatyki ..............................................................204
Rozdział 10. Prolog a logika...............................................................................207
Krótkie wprowadzenie do rachunku predykatów......................................................207
Posta% klauzulowa.................................................................................................210
Zapis klauzul........................................................................................................215
Rezolucja i dowodzenie twierdze7..........................................................................216
Klauzule Horna ....................................................................................................220
Prolog..................................................................................................................220
Prolog i programowanie w logice ...........................................................................222
Rozdział 11. Projekty w Prologu.........................................................................225
Łatwiejsze projekty...............................................................................................225
Projekty zaawansowane ........................................................................................227
Dodatek A Odpowiedzi do niektórych 1wicze2..................................................231
Dodatek B Klauzulowa posta1 programów .......................................................235
Dodatek C Przeno&ne programy w standardowym Prologu................................241
Przeno+no+% standardu Prologu ..............................................................................241
Ró5ne implementacje Prologu................................................................................242
Czego si8 wystrzega% ............................................................................................243
Definicje wybranych predykatów standardowych ....................................................244
Przetwarzanie znaków.....................................................................................245
Dyrektywy .....................................................................................................247
Wej+cie i wyj+cie strumieniowe........................................................................247
Ró5ne ............................................................................................................249
Dodatek D Ró-ne wersje Prologu.....................................................................251
Dodatek E Dialekt edynburski.........................................................................255
Dodatek F micro-Prolog ..................................................................................263
Skorowidz......................................................................................267
Rozdział 1.
Wprowadzenie
Prolog
Prolog to komputerowy jzyk programowania. Jego pocztki sigaj roku 1970, od tego
czasu u ywano go w aplikacjach zwizanych z przetwarzaniem symbolicznym, w ta-
kich dziedzinach, jak:
relacyjne bazy danych,
logika matematyczna,
rozwizywanie problemów abstrakcyjnych,
przetwarzanie jzyka naturalnego,
automatyzacja projektowania,
symboliczne rozwizywanie równa&,
analiza struktur biochemicznych,
ró ne zagadnienia z dziedziny sztucznej inteligencji.
Osoby dopiero zaczynajce swoj przygod z Prologiem s zaskoczone tym, e pisanie
programu w Prologu nie polega na opisywaniu algorytmu, jak to ma miejsce w trady-
cyjnych jzykach programowania. Zamiast tego programi)ci Prologu zajmuj si ra-
czej formalnymi relacjami i obiektami zwizanymi z danym problemem, badajc, które
relacje s „prawdziwe” dla szukanego rozwizania. Tak wic Prolog mo e by. uwa any
za jzyk opisowy i deklaratywny . Programowanie w Prologu polega przede wszystkim
na opisaniu znanych faktów i relacji dotyczcych problemu, w mniejszym stopniu na
podawaniu kolejnych kroków algorytmu. Kiedy programujemy w Prologu, sposób
pracy komputera cz)ciowo wynika z deklaratywnej semantyki Prologu, cz)ciowo
z tego, e Prolog na podstawie danego zbioru faktów mo e wnioskowa. nowe fakty,
a jedynie cz)ciowo na podstawie jawnie podanych przez programist instrukcji ste-
rujcych.
12
Prolog. Programowanie
Obiekty i relacje
Prolog to komputerowy jzyk programowania u ywany do rozwizywania proble-
mów dotyczcych obiektów i relacji midzy nimi.
Kiedy na przykład mówimy, e „Jan ma ksi k”, informujemy, e istnieje relacja
własno)ci midzy obiektem „Jan” a obiektem „ksi ka”. Co wicej, jest to relacja upo-
rzdkowana: Jan ma ksi k, ale ksi ka nie ma Jana. Je)li zadajemy pytanie „Czy Jan
ma ksi k?”, staramy si pozna. relacj. Wiele problemów mo emy opisa., wskazu-
jc obiekty i ich relacje. Rozwizanie problemu polega na za daniu od komputera in-
formacji o obiektach i relacjach, które mo na z naszego programu wywnioskowa..
Nie wszystkie relacje jawnie okre)laj wszystkie obiekty, które ich dotycz. Kiedy na
przykład mówimy „Bi uteria jest cenna”, oznacza to, e istnieje relacja „bycia cen-
nym” dotyczca bi uterii. Nie wiadomo, dla kogo bi uteria jest cenna ani dlaczego.
Wszystko zale y od tego, co zamierzamy wyrazi.. Je)li tego typu relacje bdziemy
modelowa. w Prologu, to liczba podawanych szczegółów zale e. bdzie od tego, ja-
kiej odpowiedzi oczekujemy od komputera.
Mówimy tutaj o obiektach, ale nie nale y myli. tego z popularn metodologi pro-
gramowania — programowaniem obiektowym. W programowaniu obiektowym obiekt
to struktura danych, która mo e dziedziczy. pola i metody z hierarchii klas, do której
sama nale y. Wprawdzie pocztki programowania obiektowego mo na datowa. na
)rodek lat 60., lecz popularno). zyskało w latach 80. i 90., kiedy to pojawiły si takie
jzyki jak Smalltalk-80, C++ czy Java.
Z kolei Prolog ewoluował niezale nie od pocztku lat 70., za) jego zacztkiem były
postpy programowania w logice. Prologu nie nale y porównywa. z jzykami obiek-
towymi, takimi jak C++ i Java, gdy Prolog słu y do całkiem innych zada& i całkiem
inne znaczenie ma w nim słowo „obiekt”. Dziki elastyczno)ci Prologu mo liwe jest
napisanie w nim programu, który bdzie interpretował podobny do Prologu jzyk obiek-
towy, ale to ju całkiem inne zagadnienie. Reasumujc, kiedy mówimy o obiektach
w Prologu, nie chodzi nam o struktury danych dziedziczce pola i metody z klasy, ale
o byty, które mo na opisa. termami.
Prolog stanowi praktyczn i wydajn implementacj szeregu aspektów „inteligentnego”
wykonywania programu: braku determinizmu, równoległo)ci i wywoływania proce-
dur według wzorca. Prolog zawiera ujednolicon struktur danych, term , na bazie któ-
rej tworzone s wszystkie dane oraz same programy Prologu. Program prologowy
składa si ze zbioru klauzul, a ka da klauzula to albo fakt opisujcy pewn informa-
cj, albo reguła mówica, jak rozwizanie mo na powiza. z danymi faktami. Tak
wic Prolog mo na uwa a. za pierwszy krok na drodze ku ostatecznemu celowi pro-
gramowania w logice. W ksi ce tej nie bdziemy zanadto zastanawia. si nad dal-
szymi implikacjami programowania w logice, nie bdzie nas te specjalnie intereso-
wało, dlaczego Prolog nie jest gotowym jzykiem programowania w logice. Zamiast
tego skoncentrujemy si na pisaniu przydatnych programów za pomoc istniejcych
obecnie systemów standardowego Prologu.
Zgłoś jeśli naruszono regulamin