Jezyk programowania Prolog
24.05.2011 | aktual.: 26.05.2011 18:57
Prolog język programowania logicznego. Program Prologu to opis reguły wnioskowania oraz celu do którego zmierzamy, a rola komputera polega na odpowiednim zastosowaniu reguł aby znaleźć rozwiązanie.
Do programowania w Prologu, używałem darmowego SWI-Prolog oraz edytora SWI-Prolog-Editor.
Instalacja programu
Pobieramy na początek SWI‑Prolog, który instalujemy na swoim sprzęcie, a później edytor, który ułatwi nam pracę z programem.
Obsługa programu
Podczas tworzenia nowego projektu powinniśmy go najpierw zapisać, a przed jego uruchomieniem dokonać sprawdzenia (Start - Consult lub klawisz F9). Górne cześć to okno edytora, gdzie umieszczamy fakty oraz reguły. Jeżeli mamy zamiar wprowadzić jakieś zapytanie to wykonujemy go w dolnej części.
Fakty
W Prologu podaje się bazę faktów i reguł. Potem można wykonywać zapytania na tej bazie. Podstawową jednostką w Prologu jest predykat. Predykat składa się z nagłówka i argumentów, na przykład: ojciec(tomasz, agata), gdzie ojciec to nagłówek a tomasz i agata to argumenty.
Przykładowe fakty:
rodzic(jacek,krzys). rodzic(iza,krzys). rodzic(jacek,ola). rodzic(iza,ola). rodzic(andrzej,jas). rodzic(anna,jas). rodzic(krystyna,iza). rodzic(krystyna,andrzej). rodzic(halina,jacek). rodzic(jozef,jacek). rodzic(jan,iza). rodzic(jan,andrzej). rodzic(cecylia,halina).
Przykładowe rozwiązanie:
?- rodzic(jacek,krzys). yes ?- rodzic(ola,krzys). no
Sprawdzenie czy Jacek jest rodzicem Krzysia? Tak.
Możemy sprawdzić kto jest rodzicem Oli.
?- rodzic(X,ola). jacek ; iza
Dodając kolejne fakty do obecnych
kobieta(iza). kobieta(anna). kobieta(ola). kobieta(krystyna). kobieta(halina). kobieta(hanna). kobieta(cecylia). mezczyzna(krzys). mezczyzna(jacek). mezczyzna(andrzej). mezczyzna(jozef). mezczyzna(jan).
Sprawdźmy teraz kto jest wnukami Krystyny.
?- rodzic(krystyna, X), rodzic(X,Y).
Możemy zapisać to w inny sposób dodając regułę
babcia(X,Y):-rodzic(X,Z),rodzic(Z,Y),kobieta(X).
Sprawdźmy czy działa:
?- babcia(krystyna,Y). Y = krzys ; Y = ola ; Y = jas.