Wprowadzenie do Prologa Rozdział 1 Tutorial Introduction Maciej Gapiński Dominika Wałęga
Spis treści 1. Podstawowe informacje 2. Obiekty i relacje 3. Reguły 4. Fakty 5. Zapytania 6. Zmienne i stałe
Podstawowe informacje Prolog to jeden z najpopularniejszych języków programowania logicznego. Nazwa tego języka to akronim powstały od PROgramowania w LOGice (ang. programming in logic). Jest to język deklaratywny - nie zapisujemy algorytmu rozwiązującego dany problem. Opisujemy problem tak, by system mógł sam wywnioskować jakie jest jego rozwiązanie. Definiujemy dany problem (obiekty związane z problemem i relacje pomiędzy tymi obiektami), a nie sposób jego rozwiązania. Prolog jest wykorzystywany w wielu programach związanych z: - logiką w informatyce - sztuczną inteligencją - przechowywaniem i przetwarzaniem danych - rozwiązywaniem problemów abstrakcyjnych
Podstawowe informacje Współcześnie jest dostępny szereg implementacji, w tym swobodnie ogólnodostępne kompilatory. SWI-Prolog: http://www.swi-prolog.org GNU-Prolog: http://www.gnu-prolog.inria.fr
Podstawowe informacje
Podstawowe informacje Nazwy relacji i obiektów muszą zaczynać się małymi literami. Nazwy rozpoczynające się od dużej litery oznaczają zmienne. Zaczynamy od zapisu relacji. Następnie dopisujemy rozdzielone przecinkami oraz ujęte w okrągły nawias obiekty Nazwy obiektów występujących w nawiasach nazywamy argumentami Nazwy relacji znajdującej się przed nawiasem nazywamy predykatem
Obiekty i relacje W omawianym języku definiujemy obiekty i określamy wiążące je relacje. Nie podajemy z czego składa się dany obiekt i co można z nim zrobić, ale jaki on jest. Opisujemy również relacje jakim obiekt ten podlega. Najprostszym sposobem opisu obiektu, jest podanie faktów z nim związanych, jak na przykład: mniejszy(mysz, slon). mysz jest mniejsza od słonia ciezszy(arbuz, gruszka). arbuz jest cięższy od gruszki W podanych przykładach określamy obiekty (mysz, słoń, arbuz, gruszka) i wiążemy je relacją (mniejszy, cięższy).
Obiekty i relacje Tworzymy przykładowy dokument (Plik PL (.pl)):
Obiekty i relacje Po uruchomieniu programu, możemy mu zadawać pytania:
Obiekty i relacje Prolog nie wie, że w stosunku do relacji może stosować przechodniość. W ten oto sposób dochodzimy do sytuacji, gdy musimy poinformować program o pewnych relacjach, czyli określić reguły.
Obiekty i relacje
Reguły Reguł używamy, gdy jeden fakt zależy od grupy innych faktów. W języku polskim tworzymy takie reguły za pomocą słów jeżeli, jeśli itp. Przykłady: Jeżeli pada deszcz, zabieram ze sobą parasolkę. Wchodzę na spacer, jeśli świeci słońce. Reguły używane są również do zapisywania definicji. Przykłady: X jest ptakiem, jeżeli: X jest zwierzęciem. X posiada pióra.
Reguły Na regułę składa się głowa oraz ciała. Połączone są one symbolami dwukropka i myślnika. Głowa składa się z jednego predykatu. Ciało reguły może być połączeniem dowolnej ilości warunków (oddzielanych przecinkami - oznaczającymi logiczne and). Przykłady: Adam lubi tylko tanie i zdrowe przekąski. lubi(adam, X) :- tanie(x), zdrowe(x). Aby spełniona była przesłanka reguły, spełnione muszą być wszystkie jej cele.
Reguły
Fakty Fakt to zdanie otrzymane przez wstawienie do określonego w programie predykatu wartości zmiennych(obiektów), dla których jest ono prawdziwe. Przykłady: lubi(adam,ewa). Fakt Adam lubi Ewę. lubi(ewa,adam). Fakt Ewa lubi Adama.
Fakty Fakty odnoszą się również do relacji. Relacje mogą mieć dowolna ilość argumentów. Przykłady: gra(adam,ewa,szachy). Fakt Adam i Ewa grają w szachy. jedzenie(ewa,adam,jablko). Fakt Ewa i Adama jedzą jabłko.
Fakty Nazwy wszystkich relacji i obiektów muszą zaczynać się małymi literami - lubi(adam,ewa). Nazwy obiektów występujące w nawiasach nazywamy argumentami. Nazwę relacji znajdującą się przed nawiasem nazywamy predykatem - gra(adam,ewa,szachy) Zbiór faktów nazywamy bazą danych
Fakty i reguły kończymy kropką.
Zapytania Gdy znamy już fakty możemy zadawać pytania. W tym celu przed frazą umieszczamy znak zapytania i myślnik (?-) Przykłady:?- posiada(adam,rower). Pytanie: Czy istnieje fakt mówiący, że Adam posiada rower? Wpisane przez Nas pytanie musi być zakończone kropką, po której naciskamy klawisz Enter (celem wysłania go do systemu). Prolog przeszuka całą dostępną bazę danych (fakty i reguły) i jeśli zostanie znalezione coś, co pasuje do zapytania i zwraca przy tym wartość logiczną prawda, zostanie zwrócona odpowiedź yes; w przeciwnym razie no. Zamiast szukać odpowiedzi na pytanie Czy Adam ma rower?, możemy chcieć zapytać Co ma Adam?. Przykład:?- posiada(adam,x).
Zapytania Przykłady: lubi(jas,piernik). lubi(jas,malgosia). lubi(malgosia,cukierek). lubi(malgosia,piernik). Możemy konstruować zapytania złożone, np.?- lubi(jas,malgosia), lubi(malgosia,jas). czyli: Czy prawdą jest, że Jaś lubi Małgosię i Małgosia lubi Jasia? Lub?- lubi(jas,x), lubi(malgosia,x). czyli: Szukam tego wszystkiego co lubi zarówno Jas jak i Małgosia. Odpowiedź na pytanie o to co lubi Jaś lub Małgosia uzyskamy zapytaniem:?- lubi(jas,x); lubi(malgosia,x).
Zmienne i stałe Zmienna - relacja może być rozumiana jako funkcja określona na pewnym zbiorze obiektów. Wówczas przez zmienną rozumiemy dowolny, ale nie ustalony element z dziedziny jakiejś relacji. Nazwy zmiennych są atomami rozpoczynającymi się zawsze wielką literą. Przykład: Relacja student/2, która jest prawdziwa jeśli argumentami są nazwisko studenta i nazwa przedmiotu na egzaminie z którego ściągał. Wstawiając do niej zmienne (Kowalski,Origami) otrzymamy predykat prawdziwy dla par utworzonych przez konkretne nazwisko i odpowiadający mu przedmiot(y). Jeśli bazą programu jest zbiór: student(a,teoria_pola). W wyniku otrzymamy: 1? student(kowalski,origami). Kowalski = a, Origami = teoria_pola ;
Zmienne i stałe Stała - konkretny obiekt (np: a, kowalski, 111) lub konkretna relacja (litera, nazwisko, liczba,:-). Stałe dzielimy na: Liczby Atomy (są zbudowane z dowolnych symboli ewentualnie ujętych w pojedynczy cudzysłów przy czym zawsze zaczynają się małą literą)
Netografia http://fulmanski.pl/zajecia/prolog/wyklad.pdf http://ki.pwr.edu.pl/kobylanski/prolog/ http://home.agh.edu.pl/~gjn/dydaktyka/lecrbs/gjn-labprolog/node2.html http://math.uni.lodz.pl/~kowalcr/lodz_paradygmaty_z/prologbook.pdf https://pl.wikipedia.org/wiki/prolog_(język_programowania)