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
·
· w języku polskim:
Po wykonaniu pierwszego kroku będziesz umiał:
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:
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.
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).
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.
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.
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.
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.
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 ;
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ł:
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.
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.
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 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ą.
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...
stec007