Prolog - wprowadzenie

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:.

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.

© A. Czoska, M. Komosiński, B. Kroll, A. Kupś, A. Mensfelt, B. Szopka