Prolog.doc

(1030 KB) Pobierz

Zainstalowałeś na swoim komputerze język Prolog, uruchomiłeś go, system napisał dwa znaki ?- i najwyraźniej na coś czeka. Co mu wpisać? Tu znajdziesz odpowiedź na to pytanie.

Jako przykład implementacji posłuży nam SWI-Prolog z Uniwersytetu w Amsterdamie, który dostępny jest na wielu platformach sprzętowych i pod wieloma systemami operacyjnymi, w tym pod Linux, MacOS i MS Windows.

Zapraszam na krótki spacer po Prologu.

Krok pierwszy

·         Uruchamiamy Prolog

·         Zadajemy pierwsze pytania

·         Kończymy pracę z Prologiem

Krok drugi

·         Poznajemy termy

·         Poznajemy podstawowe predykaty

·         Rozwiązujemy nietrywialne problemy

Krok trzeci

·         Modelujemy światy

·         Piszemy pierwszy program

·         Wczytujemy program do systemu Prolog

Literatura

·          

  

·         w języku polskim:

    1. K.L. Clark, F.G. McCabe, Micro-Prolog, WNT, Warszawa, 1988.
    2. W.C. Cloksin, Ch.S. Melish, Prolog. Programowanie, HELION, 2003.
    3. R. Kowalski, Logika w rozwiązywaniu zadań, WNT, Warszawa, 1989.
    4. M. Kutyłowski, MICROPROLOG. Opis języka programowania, Wydawnictwo Uniwersytetu Wrocławskiego, Wrocław, 1989.
    5. F. Kluźniak, S. Szpakowicz, Prolog, WNT, Warszawa, 1983.
    6. J. Szajna, M. Adamski, T. Kozłowski, Turbo Prolog. Programowanie w języku logiki, WNT, Warszawa, 1991.

Po wykonaniu pierwszego kroku będziesz umiał:

  1. Uruchomić Prolog.
  2. Zadawać pytania.
  3. Kończyć pracę z Prologiem.

ruchamiamy Prolog

Chociaż opis nasz dotyczy języka SWI-Prolog (źródła i binaria dostępne w Archiwum), to osobno opiszemy uruchamianie kompilatora Prologu w Unixie (np. Linux, SCO Unix, itp.) oraz w systemie Windows 95/98.

Unix

Aby uruchomić Prolog wpisujemy polecenie pl. Po jego wywołaniu pojawia się następujący (lub podobny) komunikat:

 

Welcome to SWI-Prolog (Version 3.4.0)

Copyright (c) 1990-2000 University of Amsterdam.

Copy policy: GPL-2 (see www.gnu.org)

 

For help, use ?- help(Topic). or ?- apropos(Word).

 

?-

Windows 95/98

Program Prolog domyślnie dostepny jest z menu Start/Programy/SWI-Prolog. Po jego uruchomieniu pojawia się okienko konsoli tekstowej z następującym (lub podobnym) komunikatem:

 

Welcome to SWI-Prolog (Version 3.4.0)

Copyright (c) 1990-2000 University of Amsterdam.

Copy policy: GPL-2 (see www.gnu.org)

 

For help, use ?- help(Topic). or ?- apropos(Word).

 

?-

Jeśli w oknie konsoli wystąpią problemy z fontami (np. wpisywany tekst ``wybiega'' przed kursor), to kliknąć lewym przyciskiem myszy na ikonce na górnym pasku okna i w menu Settings/Font... wybrać odpowiedni font.

Oba komunikaty kończą się znakami ?- będącymi zachętą do zadania pytania Prologowi.


adajemy pierwsze pytania

Praca w Prologu polega na prowadzeniu dialogu z systemem. Użytkownik zadaje pytania, natomiast Prolog stara się znaleźć na nie odpowiedzi (możliwie wszystkie).

Pytanie zakończone kropką wpisuje się po znaku zachęty ?-. System po znalezieniu odpowiedzi drukuje ją. Możliwe są następujące trzy przypadki:

·         odpowiedź Yes: system stwierdził, że odpowiedź na postawione pytanie jest twierdząca,

·         odpowiedź No: system stwierdził, że odpowiedź jest negatywna lub nie mógł znaleźć odpowiedzi,

·         wykaz zmiennych wraz z ich wartościami: system znalazł wartości zmiennych występujących w pytaniu, przy których to wartościach odpowiedź na postawione pytanie jest twierdząca. Po ukazaniu się wykazu zmiennych i wartości użytkownik może poprosić o kolejną odpowiedź (wciskając znak średnika) lub zrezygnować z szukania dalszych odpowiedzi (wciskając klawisz Enter).

Proste pytania

Na początek zapytamy się czy prawdą jest, że liczba 2 jest większa od liczby 1. W tym celu należy po znaku zachęty wpisać warunek 2 > 1 i zakończyć go kropką:

 

?- 2 > 1.

 

Yes

?-

Uzyskaliśmy odpowiedź twierdzącą Yes.

Sprawdźmy teraz czy liczba 3 jest mniejsza od liczby 2:

 

?- 3 < 2.

 

No

?-

Tym razem odpowiedź No jest negatywna.

Złożone pytania

Pytanie złożone jest koniunkcją lub alternatywą innych pytań. W systemie Prolog spójnikiem koniunkcji jest przecinek natomiast alternatywy średnik.

Zadajmy pytanie będące koniunkcją powyższych dwóch prostych pytań:

 

?- 2 > 1, 3 < 2.

 

No

?-

Jak widać koniunkcja jest fałszywa gdyż przynajmniej jeden z jej członów był fałszywy (3 < 2).

Sprawdźmy teraz ich alternatywę:

 

?- 2 > 1; 3 < 2.

 

Yes

?-

Alternatywa jest prawdziwa gdyż co najmniej jeden z jej członów był prawdziwy (2 > 1).

Rozpatrzmy teraz następujące pytanie złożone:

 

?- X = 1, X = 2.

 

No

?-

Odpowiedź jest negatywna gdyż zmienna X nie może mieć jednocześnie wartości 1 i 2.

Gdy zadamy pytanie w postaci alternatywy:

 

?- X = 1; X = 2.

 

X = 1

otrzymamy informację, że dla zmiennej X równej 1 powyższa alternatywa jest prawdziwa. Jeśli naciśniemy teraz znak średnika, to system znajdzie kolejną odpowiedź X = 2.

Jeśli teraz znowu naciśniemy średnik, to pojawi się odpowiedź No, która oznacza, że jedynymi wartościami zmiennej X, dla których powyższa alternatywa jest prawdziwa są 1 oraz 2 i nie ma innych takich wartości.

Cały powyższy dialog wygląda następująco:

 

?- X = 1; X = 2.

 

X = 1 ;

 

X = 2 ;

 

No

?-


ończymy pracę z Prologiem

Aby zakończyć pracę Prologu należy wpisać po znaku zachęty ?- polecenie halt koniecznie zakończone kropką.

Po wykonaniu drugiego kroku będziesz umiał:

  1. Posługiwać się termami.
  2. Korzystać z podstawowych predykatów.
  3. Rozwiązywać nietrywialne zadania.

ermy w Prologu

Prolog operuje na wyrażeniach lub, inaczej mówiąc, na termach. Oznacza to, że jest językiem obliczeń symbolicznych a nie numerycznych. Oczywiście możliwe są w Prologu również obliczenia numeryczne ale są mniej naturalne i mniej eleganckie niż w innych językach jak np. Pascal, C czy Fortran.

Termy w Prologu dzieli się na:

·         zmienne,

·         stałe,

·         termy złożone.

Zmienne

Nazwą zmiennej w Prologu jest ciąg liter, cyfr i znaku podkreślenia zaczynający się od wielkiej litery lub znaku podkreślenia. Szczególne znaczenie ma zmienna, której nazwa składa się jedynie ze znaku podkreślenia, ale o tym później.

Oto przykłady poprawnych w Prologu nazw zmiennych:

X   Ala   Szerokosc   _   X121   _154

Dopóki zmienna w Prologu nie ma wartości, to mówimy o niej, że jest wolna. O zmiennej, która ma już wartość mówimy, że jest ukonkretniona. Zmienna, która otrzymała wartość nie może już zmienić tej wartości.

Zmienna w Prologu ma zupełnie inny charakter niż w językach proceduralnych takich jak Pascal, C czy Fortran. W językach służących do zapisywania algorytmów (czyli proceduralnych) zmienna jest nazwą pojemnika na wartość.

Poniższy przykład pochodzi z Pascala:

   x := 1;

   x := 2;

   x := x+1;

Pierwsza instrukcja zapisuje w zmiennej x wartość 1, następna usuwa wartość 1 i umieszcza w niej wartość 2 natomiast trzecia instrukcja zwiększa bieżącą wartość 2 o jeden, a więc umieszcza w zmiennej x wartość 3.

Odpowiednikiem instrukcji podstawienia z języków proceduralnych jest w Prologu predykat is. Predykat ten wymaga by po prawej stronie słowa is znajdowało się wyrażenie arytmetyczne bez wolnych zmiennych natomiast:

·         jeśli po lewej stronie jest wolna zmienna, to obliczona wartość wyrażenia zostanie podstawiona pod tą zmienną,

·         jeśli po lewej stronie jest liczba, to zostanie ona porównana z wartością wyrażenia.

Zapiszmy powyższy przykład jako pytanie w Prologu:

 

?- X is 1, X is 2, X is X+1.

 

No

?-

Dlaczego obliczenia zakończyły się niepowodzeniem? Otóż zmienna w Prologu nie jest nazwą pojemnika na wartość. Po podstawieniu pod zmienną X wartości 1 (pierwszy warunek w pytaniu) w każdym miejscu pozostałych dwóch warunków gdzie występuje zmienna X umieszczana jest zamiast niej wartość 1 (bo taką wartość przyjęła ta zmienna).

Po podstawieniu pod X wartości 1 pozostałe do sprawdzenia warunki przyjmują postać:

?- 1 is 2, 1 is 1+2.

Oczywiście wartość 2 (po prawej stronie słowa is w pierwszym warunku) nie jest równa wartości 1 z lewej strony. Warunek zawodzi i stąd odpowiedź No.

Stałe

Stałe w Prologu, podobnie jak w innych językach programowania, nie mogą zmieniać swojej wartości. Zapisuje się je jako ciągi liter, cyfr i znaku podkreślenia rozpoczynające się od małej litery. Szczególnymi stałymi w Prologu są liczby całkowite i rzeczywiste. Dowolny ciąg znaków może być w Prologu również stałą ale w tym celu należy go ująć między cudzysłowy.

Oto kilka przykładów stałych:

ala   123   'Ala ma Asa'  

Częstym błędem w Prologu jest zapisanie stałej zaczynając od wielkiej litery. Choć to niezgodne z zasadami pisowni w języku polskim, to stała ala wyrażająca osobę o imieniu Ala musi być zapisana małą literą.

Termy złożone

Zmienne i stałe są prostymi termami. Oznacza to, że nie można ich rozłożyć na prostsze wyrażenia. Aby móc zapisywać wyrażenia złożone z innych wyrażeń wprowadzono tzw. termy złożone.

Term złożony ma następującą postać:

f(T1, T2, ..., Tn),

gdzie f jest nazwą n-argumentowego symbolu funkcyjnego, natomiast Ti...

Zgłoś jeśli naruszono regulamin