Wprowadzenie do środowiska programowania w Prologu
Co to jest Prolog?
Prolog to język programowania w logice (PROgrammation en LOGique, PROgramming in LOGic).
więcej na Wikipedii: Prolog (język programowania)
SWI Prolog
Współcześnie jest dostępnych szereg implementacji Prologu, w tym swobodnie dostępne kompilatory Prologu:
np:.
- SWI-Prolog, Jan Wielemaker, http://www.swi-prolog.org
- GNU-Prolog, Daniel Diaz, http://gnu-prolog.inria.fr
- dostępne przez www (wymagana zainstalowana Java): http://ktiml.mff.cuni.cz/~bartak/prolog/testing.html
W czasie zajęć będziemy pracować w środowisku SWI-Prolog.
Proszę pobrać plik tego programu ze strony http://www.swi-prolog.org/download/stable (wybrać SWI-Prolog/XPCE for Windows NT/2000/XP/Vista)
Link bezpośredni do aktualnej wersji: http://www.swi-prolog.org/download/stable/bin/w32pl5664.exe
Podstawowym interfejsem w SWI-Prologu jest powłoka (konsola).
Jest ona bardzo podobna do konsoli spotykanej w systemach unixowych, oczywiście z uwzględnieniem specyfiki programowania w Prologu.
Pisanie programu w Prologu
Elementy składniowe programu:
- atomy: stałe znakowe — pisane z małej litery,
- niewiadome/szukane (tzw. zmienne logiczne) — pisane z wielkiej litery,
- termy: symbole funkcyjne przyjmujące argumenty — pisane z małej litery z argumentami w nawiasie
Przykład programu zapisanego w Prologu (http://wazniak.mimuw.edu.pl/):
lubi(jan, tatry).
lubi(jan, beskidy).
lubi(jerzy, beskidy).
lubi(jerzy, bieszczady).
lubi(józef, sudety).
lubi(justyna, gświętokrzyskie).
bratniadusza(X, Y) :- lubi(X, S), lubi(Y, S), X \= Y.
Program składa się z
- szeregu klauzul (ang. clause), wyróżniamy:
- fakty (klauzule proste)
- reguły (klauzule złożone)
- oraz celu (ang. goal)
Uruchamianie programu
W celu uruchomienia programu należy załadować plik z kodem (rozszerzenie *.pl) w języku Prolog.
Możemy w tym celu wykorzystać polecenie:
- menu File->Consult… u góry ekranu (a następnie wybieramy plik z katalogu)
- ręcznie w konsoli wpisujemy predykat consult (skrót: [nazwa].)
Operację tę należy powtarzać po każdej modyfikacji kodu.
Programowanie nieklasyczne
Prolog NIE jest klasycznym językiem programowania.
Nie ma w nim:
- słów kluczowych, (if, for…)
- brak rozróżnienia we/wy
- brak funkcji
- brak zmiennych (klasycznych)
- brak jawnej sekwencyjności, czy iteracyjności
Prolog dostarcza:
- metody strukturalizowania informacji, termy
- programowania deklaratywnego
- rekurencji, jak metody przetwarzania informacji
- unifikacji - mechanizmy dopasowywania wzorców
- rezolucji - metody wnioskowani logicznego
- strategii sterowania wnioskowaniem
ĆWICZENIA
Ćwiczenie 1: Uruchamianie konsoli Prologu
- Windows: Proszę uruchomić za pomoc ikony, menu Start, itp.
- Unix/GNU/Linux: Proszę otworzyć okno terminala (Akcesoria/Terminal z menu Ubuntu) i uruchomić w nim powłokę SWI przez polecenie swipl (może też być dostepny przez polecenie pl).
UWAGA: każda „linia kodu” w Prologu musi się kończyć kropką!
- Proszę sprawdzić działanie systemu pomocy, przez predykat help., a następnie przeczytać opis do predykatu consult (help(consult).) .
- Proszę wyjść z powłoki przez halt.
- Proszę ponownie uruchomić powłokę SWI. Przy pomocy jakiej kombinacji klawiszy można wyjść z powłoki unixowej - analogiczenie w SWI?
Ćwiczenie 2: Pisanie prostych programów
- Proszę przyjrzeć się poniższemu, prostemu programowi (klasyczny przykład „Rodzina”).
kobieta(ola).
kobieta(lila).
mezczyzna(tomek).
mezczyzna(max).
rodzic(ola,max).
rodzic(tomek,max).
rodzic(tomek,lila).
Proszę uruchomić wybrany zewnętrzny edytor tekstu (np. Notatnik) i wpisać w nim analogiczny program (dotyczący własnej rodziny). Program należy zapisać w pliku przyklad1.pl
Ćwiczenie 3: Uruchamianie programów
- W powłoce SWI należy wczytać napisany uprzednio program: [przyklad].
- Program jest kompilowany, a zawarta w nim wiedza dodawana do bazy wiedzy dostępnej z powłoki SWI. Można to sprawdzić przy pomocy polecenia:
kobieta(X).
- Po ukazaniu się pierwszej odpowiedzi należy wcisnąć klawisz średnika
;
by wyszukać kolejne dopasowania.
Ćwiczenie 4: Praca z programem
- Systemowi można teraz zadawać pytania, cele do zrealizowania. Proszę zapoznać się z propozycjami poniższych pytań i zapisać je w Prologu. (przykładowe pytania dotyczą przykładu z ćwiczenia 2):
- Kto jest mężczyzną?
- Czy Tomek jest mężczyzną?
- Czy Smerfus jest mężczyzną?
- Czy Ola jest rodzicem Max-a?
- Czyim rodzicem jest Ola?
- Czy zamiast X można wpisać inny symbol? Jaki?
- Kto jest rodzicem Max-a?
Ćwiczenie 5: Rozbudowa programu
Proszę rozbudować program do poniższej, analogicznej (co do liczby osób i zależności) formy:
rodzic(ola,max).
rodzic(tomek,max).
rodzic(tomek,lila).
rodzic(max,ania).
rodzic(max,kasia).
rodzic(kasia,radek).
kobieta(ola).
kobieta(lila).
kobieta(kasia).
kobieta(ania).
mezczyzna(tomek).
mezczyzna(max).
mezczyzna(radek).
Czy kolejność wpisywania linii ma znaczenie?
UWAGA: aby dopisane fakty były dostępne dla Prologu, należy go ponownie wczytać!
Jeżeli koniunkcję celów oznaczamy przecinkiem
,
to jak zapytać:
- kto jest matką
- a kto ojcem Max-a?
Napisz odpowiednie zapytania i sprawdź ich działanie.
Ćwiczenie 6: Reguły
Proszę dopisać poniższe reguły i sprawdzić ich działanie.
- Proszę zdefiniować reguły opisujące: brata, siostrę, dziadka i babcię. Proszę dokładnie sprawdzić ich działanie.
Proszę się zastanowić nad własnymi regułami opisującymi relacje w rodzinie.