Prolog (Pro-Logic) Programowanie w Logice. Dr inż. Piotr Urbanek

Podobne dokumenty
Wprowadzenie do Prologa

Wstęp do Prolog. Wykonali: Rafał Denkiewicz, Rafał Rutkowski, Kacper Rękawiecki

Programowanie w logice

PODSTAWY SZTUCZNEJ INTELIGENCJI

Programowanie w logice

Języki programowania deklaratywnego

PROLOG. Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd.

Języki programowania sztucznej inteligencji Piotr Fulmański

Języki programowania deklaratywnego

Programowanie w Logice

Wprowadzenie do logiki Zdania, cz. III Język Klasycznego Rachunku Predykatów

Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań.

Programowanie deklaratywne

Laboratorium przedmiotu Paradygmaty Programowania

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Programowanie w logice Prolog. Piotr Fulmański

Programowanie obiektowe

Programowanie deklaratywne

Deklarowania faktów dotyczących obiektów i związków między nimi. Definiowania reguł dotyczących obiektów i związków między nimi.

Paradygmaty programowania

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Prezentacja do pobranie:

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie deklaratywne

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.

Programowanie w logice Prolog 2

1 Podstawy c++ w pigułce.

Projekt 4: Programowanie w logice

Podstawy Języka Java

Programowanie w Logice Struktury danych (Lista 2)

Definicje. Algorytm to:

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie komputerowe. Zajęcia 7

OBIEKTY PHP. G. Panuś

Programowanie w języku C++ Grażyna Koba

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Adam Meissner.

Wykład 8: klasy cz. 4

Programowanie w logice Wykład z baz danych dla

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Wykład 5: Klasy cz. 3

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Języki programowania zasady ich tworzenia

Definicje klas i obiektów. Tomasz Borzyszkowski

Zmienne i stałe w PHP

Składnia rachunku predykatów pierwszego rzędu

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Programowanie w Logice

Programowanie w logice Prolog 1

Definiowanie własnych klas

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania skrót z wykładów:

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Internet Semantyczny i Logika I

Technologie i usługi internetowe cz. 2

Programowanie obiektowe

Podstawowe Pojęcia. Semantyczne KRZ

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

WYRAŻENIA ALGEBRAICZNE

Definiowanie języka przez wyrażenie regularne(wr)

Prolog Wejście / wyjście r

Rozdział 4 KLASY, OBIEKTY, METODY

Podstawy i języki programowania

Język ludzki kod maszynowy

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Modelowanie diagramów klas w języku UML. Łukasz Gorzel @stud.umk.pl 7 marca 2014

Wstęp do Programowania Obiektowego. Wykład 13 Paradygmaty. Składnia i semantyka.

Klasy abstrakcyjne i interfejsy

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Metoda Tablic Semantycznych

MATERIAŁY DO ZAJĘĆ II

Programowanie obiektowe

Podstawy Programowania Podstawowa składnia języka C++

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

1 Podstawy c++ w pigułce.

CLP Programowanie logiczne z ograniczeniami.

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Programowanie w języku C++ Podstawowe paradygmaty programowania

Modelowanie i Programowanie Obiektowe

Szablony funkcji i klas (templates)

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 1. Programowanie komputerowe

LOGIKA Dedukcja Naturalna

Podstawy Programowania Obiektowego

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Java EE produkcja oprogramowania

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

Systemy ekspertowe. Wnioskowanie w systemach regułowych. Część piąta. Autor Roman Simiński.

Programowanie obiektowo zorientowane. Mirosław Głowacki Wykład w języku C++

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.1 Elementy języka Prolog: fakty i zapytania. Przemysław Kobylański

Transkrypt:

Prolog (Pro-Logic) Programowanie w Logice Dr inż. Piotr Urbanek

Do czego służy ProLog? Używany w wielu systemach informatycznych związanych z: logiką matematyczną (automatyczne dowodzenie twierdzeń); przetwarzaniem języka naturalnego; symbolicznym rozwiązywaniem równań; sztuczną inteligencją; przechowywaniem i przetwarzaniem danych. Pisanie programu w Prologu nie polega na opisywaniu algorytmu! Prolog jest językiem opisowym i deklaratywnym.

Różnice między ProLogiem a OOP Rozwiązanie jakiegoś problemu w ProLogu nie polega na stworzeniu odpowiedniego algorytmu (jak to ma miejsce w imperatywnych językach programowania tj. C lub Java) ale określeniu czego on dotyczy. Używane są do tego fakty i reguły ich przetwarzania. Rolą Prologu jest wywnioskowanie rozwiązania na podstawie podanych informacji. Obiekt klasyczny Posiada dwie istotne cechy: stan w jakim w danej chwili się znajduje zachowanie jakie dla nich jest typowe. Stan przechowuje w zmiennych zwanych polami Zachowanie jest definiowane za pomocą funkcji zwanych metodami. Każdy utworzony przez programistę obiekt jest instancją pewnej klasy. class Punkt { private: double x; double y; public: Punkt(double x, double y); void Przesun(Wektor w); };

Różnice między ProLogiem a OOP Obiekt w Prologu bytem. Nie ma definicji z czego się on składa i co można z nim zrobić (co ma miejsce w OOP), ale jaki jest. Dla każdego obiektu definiowane są relacje jakim obiekt ten podlega. Poniższe fakty stwierdzają, że: ciezszy(pomarancza,jablko). pomarańcz jest cięższa od jabłka, ciezszy(jablko,mandarynka). jabłko jest cięższe od mandarynki. Pomarańcza, jabłko, mandarynka obiekty Cięższy relacja między obiektami.

Programowanie w ProLogu ciezszy(arbuz,pomarancza). ciezszy(pomarancza,jablko). ciezszy(jablko,winogrono). arbuz > pomarancza > jablko > winogrono Jak zapisać w ProLogu przechodniość relacji? ciezszy(x,y) :- ciezszy(x,z),ciezszy(z,y). Praca z Prologiem składa się z następujących etapów: Odpowiedź 1. Definiowanie obiektów poprzez definiowanie faktów dotyczących obiektów i związków między nimi. 2. Definiowanie reguł dotyczących obiektów i związków między nimi. 3. Zapytania o obiekty i związki między nimi.?- ciezszy(arbuz,x). X = pomarancza ; X = jablko ; X = winogrono ; ERROR: Out of local stack

Programowanie w ProLogu Konwencja pisania programu w ProLogu: Nazwy relacji i obiektów muszą zaczynać się małymi literami. Nazwy rozpoczynające się od dużej litery oznaczają zmienne. Najpierw zapisujemy relację, a potem, rozdzielone przecinkami i ujęte w nawias okrągły, obiekty których ona dotyczy. Nazwy obiektów występujących w nawiasach nazywamy argumentami. Nazwę relacji znajdującej się przed nawiasem nazywamy predykatem. Nie można jako predykatu użyć zmiennej. Innymi słowy, nie można się dowiedzieć jaka relacja łączy obiekty jas i malgosia X(jas,malgosia). Fakt i regułę kończymy znakiem kropki. Kolejność obiektów umieszczonych w nawiasie jest dowolna, ale trzeba stosować ją konsekwentnie. O ile bowiem dobrze znanym faktem jest to, że Ala lubi swojego kota, to nie oznacza to, że kot ten lubi Alę. Zbiór faktów i reguł nazywamy bazą danych. Składnia reguły jest następująca: <głowa reguły> :- <treść reguły>.

Praca z programem zapytania Wczytywanie programu:? [plikbezrozszerzenia].?- posiada(piotr,ksiazka) Oznacza Czy Piotr posiada książkę? Czy istnieje fakt mówiący, że Piotr ma książkę??- posiada(piotr,x). lubi(jas,piernik). lubi(jas,malgosia). lubi(malgosia,cukierek). lubi(malgosia,piernik). Oznacza Co ma Piotr? Jeśli Piotr ma X, to X jest tym czego szukam.?- lubi(jas,malgosia), lubi(malgosia,jas). Czy prawdą jest, że Jaś lubi Małgosię i Małgosia lubi Jasia?

Praca z programem zapytania?- lubi(jas,x), lubi(malgosia,x). Szukam tego wszystkiego co lubi zarówno Jas jak i Małgosia.?- lubi(jas,x); lubi(malgosia,x). Szukam tego wszystkiego co lubi Jas lub co lubi Małgosia.

Podsumowanie Program Prologu składa się z termów. Wyróżniamy cztery rodzaje termów: atomy (ang. atoms), liczby (ang. numbers), zmienne (ang. variables) termy złożone (ang. compound terms). Każdy term zapisywany jest jako ciąg znaków pochodzących z następujących czterech kategorii: duże litery: A-Z małe litery: a-z cyfry: 0-9 znaki specjalne: % + - * / \ ~ ^ < > :.? @ # $ & Zbiór ten uzupełnia znak podkreślenia (_), który zwykle traktowany jest jak litera.

Atomy Podsumowanie Atom jest ciągiem znaków utworzonym z małych i dużych liter, cyfr i znaku podkreślenia z zastrzeżeniem, że pierwszym znakiem musi być mała litera, np. jas, a, ala, x_y_z, abc dowolnego ciągu znaków ujętego w apostrofy, np. To też jest atom symboli, np.?- lub :-. Liczby W SWI-Prologu dostępne są zarówno liczby całkowite jak i rzeczywiste -17, 23, 99.9, 123e-3

Podsumowanie Zmienne Zmienna jest ciągiem znaków utworzonym z małych i dużych liter, cyfr i znaku podkreślenia z zastrzeżeniem, że pierwszym znakiem musi być duża litera lub znak podkreślenia, np. X, Kto, _123, X_1_2, _ Ostatni z wymienionych przykładów, pojedynczy znak podkreślenia, to tak zwana zmienna anonimowa. Korzystamy z niej zawsze wtedy, gdy interesuje nas tylko czy coś jest prawdą, ale zupełnie nie interesuje nas co, np. Czy ktoś lubi Jasia??- lubi(_,jas).?- a(1,2)=a(x,y). X = 1, Y = 2?- a(1,2)=a(x,x). No?- a(1,2)=a(_,_). Yes

Podsumowanie Termy złożone posiada(piotr,auto(nissan,almera)). posiada(marcin,auto(fiat,punto)). maauto(x) :- posiada(x,auto(_,_)).