Laboratorium przedmiotu Paradygmaty Programowania

Podobne dokumenty
PODSTAWY SZTUCZNEJ INTELIGENCJI

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

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

Programowanie w logice

Wprowadzenie do Prologa

Programowanie deklaratywne

Programowanie deklaratywne

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

Projekt 4: Programowanie w logice

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

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

Programowanie w Logice Środowisko programowania i dialog z systemem (Lista 0)

Podstawy języka PROLOG

Programowanie w Logice

Programowanie w języku Python. Grażyna Koba

Prezentacja do pobranie:

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

Dariusz Banasiak. Instytut Informatyki, Automatyki i Robotyki. Politechniki Wrocławskiej

Języki programowania deklaratywnego

Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.2 Elementy języka Prolog: reguły i rekurencja. Przemysław Kobylański

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Użycie Visual Basic for Applications ("VBA")

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

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

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

4. Funkcje. Przykłady

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

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

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

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.

Programowanie w logice Prolog 2

INTERFEJ SYSTEMU MIZAR-4

Bazy dedukcyjne. 1. Filozofia nowego sposobu projektowania baz danych. 2. Wady klasycznych systemów bazodanowych

3. Instrukcje warunkowe

QualitySpy moduł persystencji

Pokaz slajdów na stronie internetowej

Pakiety i interfejsy. Tomasz Borzyszkowski

Programowanie w Logice Struktury danych (Lista 2)

Programowanie obiektowe

Programowanie w logice

Paradygmaty programowania

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

JAVAScript w dokumentach HTML (1)

Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka)

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

THP-100 su Obsługa oprogramowania oraz instrukcja wzorcowania

Utworzenie pliku. Dowiesz się:

Warunki logiczne instrukcja if

Układ równań liniowych

Wyrażenie wewnątrz nawiasów jest atomem (rozpatrujemy je jako całość).

PROLOG INNE PRZYKŁADY MACIEJ KELM

Program, który się uczy.

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Logika formalna wprowadzenie. Ponieważ punkty 10.i 12. nie były omawiane na zajęciach, dlatego można je przeczytać fakultatywnie.

Ćwiczenie 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych

Laboratorium 1 - Programowanie proceduralne i obiektowe

Numeracja dla rejestrów zewnętrznych

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

1 Podstawy c++ w pigułce.

MODUŁ NAUCZYCIEL - INSTRUKCJA OBSŁUGI

EBSCOhost Wyszukiwanie podstawowe dla Bibliotek akademickich

Programowanie w logice Wykład z baz danych dla

Współpraca Integry z programami zewnętrznymi

Reguły gry zaliczenie przedmiotu wymaga zdania dwóch testów, z logiki (za ok. 5 tygodni) i z filozofii (w sesji); warunkiem koniecznym podejścia do

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Programowanie w logice Prolog 1

Temat : SBQL 1 obiektowy język zapytań.

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Np. Olsztyn leży nad Łyną - zdanie prawdziwe, wartość logiczna 1 4 jest większe od 5 - zdanie fałszywe, wartość logiczna 0

Część XII C++ Warunki zagnieżdżone Ćwiczenie 1 nazwisko40 2. nie przepisując komentarzy!

Zapytania i wstawianie etykiet z bazy danych do rysunku

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Spis treści. 1: Wyszukiwanie elementu : Do linii modelu : Powiel arkusze : Długość kabla : Rozmieszczenie widoków...

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

JAVASCRIPT PODSTAWY. opracowanie: by Arkadiusz Gawełek, Łódź

Zmienne i stałe w PHP

WPROWADZENIE WYSZUKIWANIE OGŁOSZEŃ

TWORZENIE SCHEMATÓW BLOKOWYCH I ELEKTRYCZNYCH

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]

Programowanie w Logice Przykłady programów. Przemysław Kobylański

plansoft.org Zmiany w Plansoft.org Panel wyszukiwania PLANOWANIE ZAJĘĆ, REZERWOWANIE SAL I ZASOBÓW

Temat 5. Programowanie w języku Logo

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

1 Podstawy c++ w pigułce.

Definicje. Algorytm to:

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Forte Zarządzanie Produkcją Instalacja i konfiguracja. Wersja B

Programowanie komputerowe. Zajęcia 1

Składnia rachunku predykatów pierwszego rzędu

Ziemia obraca się wokół Księżyca, bo posiadając odpowiednią wiedzę można stwierdzić, czy są prawdziwe, czy fałszywe. Zdaniami nie są wypowiedzi:

Dedukcyjne bazy danych i rekursja

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Technologia inteligentnych agentów. Autor: dr Jacek Jakieła

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Transkrypt:

Laboratorium przedmiotu Paradygmaty Programowania Laboratorium 9 Prolog podstawy 1. Podstawy Prologu Programowanie w Prologu polega na deklarowaniu: Faktów dotyczących pewnych obiektów z analizowanego świata Reguł dotyczących związków między obiektami z analizowanego świata Zapytań o obiekty i związki między nimi. Zdefiniowany w Prologu zbiór faktów oraz reguł określa się mianem bazy wiedzy. 1.1 Fakty Podstawową jednostką programistyczną w Prologu jest predykat. Predykaty mogą opisywać fakty ze świata, który chcemy przedstawić w programie. Każdy predykat składa się z nazwy oraz argumentów. Przykładowo moglibyśmy zdefiniować w Prologu następujące fakty: mezczyzna(jan). mezczyzna(tomasz). kobieta(maria). kobieta(edyta). kobieta(adam). W powyższym przykładzie zdefiniowanych zostało pięć prostych faktów mówiących, że Jan jest mężczyzną, Tomasz jest mężczyzną, Maria jest kobietą, Edyta jest kobietą, Adam jest kobietą. Należy zwrócić uwagę na kilka elementów: a) Program opisuje pięć obiektów: jan, tomasz, maria, edyta, adam i dwie relacje mezczyzna, kobieta. b) W predykacie najpierw podaje się nazwę relacji, a następnie nazwy obiektów, których ta relacja dotyczy. Nazwy obiektów ujęte są w nawiasy okrągłe. c) Fakt musi się kończyć kropką.

d) Prolog nie wie kto jest mężczyzną, kto kobietą (nie wie nawet jak odróżnić kobietę od mężczyzny). To programista nadaje sens programowi. Predykaty mogą mieć dowolną liczbę argumentów, co pokazuje następny przykład. lubi(jan, maria). lubi(edyta, tomasz). Powyższe fakty mówią, że Jan lubi Marię oraz, że Edyta lubi Tomasza. Podobnie jak w poprzednim przypadku, tutaj również predykaty te mają sens tylko przy odpowiedniej interpretacji nadanej przez programistę (Prolog nie wie co oznacza relacja lubi ). Jeżeli tworzymy predykaty posiadające więcej niż jeden argument należy zwrócić uwagę na kolejność ich zapisu (którą również definiuje programista). 1.2 Zapytania Po zdefiniowaniu bazy wiedzy możemy zadawać zapytania, które się jej dotyczą. Składnia zapytania jest w zasadzie taka sama jak dla definiowania faktów, aczkolwiek poprzedza się je symbolem?-.?- mezczyzna(jan). true.?- kobieta(maria). true.?- lubi(jan, edyta). false. 1.3 Zmienne Oczywiście, gdyby w Prologu można było wydawać tylko zapytania o fakty, które są bezpośrednio umieszczone w bazie wiedzy, możliwości jego zastosowania byłyby bardzo ograniczone. Dodatkowo korzystanie z tego systemu bardzo niewygodne, gdyż aby dowiedzieć się kogo lubi Jan należałoby wydać odpowiednie zapytanie dla wszystkich osób wprowadzonych do bazy wiedzy. Na szczęście w Prologu nie ma takiej konieczności, a zapytanie, które odpowiadałoby na powyższe pytanie przyjmie postać:?- lubi(jan, X). W powyższym zapytaniu X, jest zmienną pod którą Prolog podstawi odpowiednie obiekty, tak aby cały predykat dało się potwierdzić. W tym przypadku odpowiedź będzie wyglądała następująco: X = maria. Należy zwrócić uwagę, na fakt, że zmienna została zapisana z dużej litery. Jest to wymóg Prologu, który w ten sposób odróżnia zmienne od pozostałych obiektów w systemie (dlatego imiona zawarte w przykładach umieszczonych w tej instrukcji nie zostały zapisane z dużej litery).

Jeżeli do naszej bazy wiedzy dodamy fakt: lubi(jan, edyta). i wydamy zapytanie Kogo lubi Jan? to na ekranie uzyskamy odpowiedź: X = maria W tym momencie Prolog zatrzyma wykonywanie programu i będzie czekał na dalsze komendy. Jeżeli podamy ; to na ekranie wyświetli się następna odpowiedź: X = edyta. Jeżeli podamy. Prolog przyjmie, że pozostałe odpowiedzi nas nie interesują i przerwie przeszukiwanie bazy wiedzy. 1.4 Reguły W chwili obecnej nasza baza wiedzy wygląda następująco: mezczyzna(jan). mezczyzna(tomasz). kobieta(maria). kobieta(edyta). kobieta(adam). lubi(jan, maria). lubi(edyta, tomasz). lubi(jan, edyta). Przyjmijmy, że w naszym modelowanym świecie, zachowane jest prawo: Przyjaciel mojego przyjaciela jest moim przyjacielem. Innymi słowy, na podstawie tego prawa możemy naszą bazę wiedzy rozszerzyć o fakt, że Jan lubi Tomasza. W przypadku tak krótkiej bazy wiedzy, przeanalizowanie wszystkich faktów nie stanowi, żadnego problemu, jednak jeżeli liczba faktów będzie znacząco większa, a prawa zachodzące w modelowanym świecie bardziej złożone to ręczne ich zapisanie staje się prawie niemożliwe (a przynajmniej bardzo czasochłonne). W Prologu możemy jednak to zadanie scedować na system rozszerzając naszą bazę wiedzy o ogólne reguły. Dla naszego prawa, reguła wyglądała by następująco: przyjacielmojegoprzyjaciela(x, Y) :- lubi(x, Z), lubi(z, Y). Składnia reguły w Prologu jest następująca: Nazwa reguły, Parametry reguły ujęte w nawiasy okrągłe, Symbol :-, Ciało reguły. Najczęściej reguły wyrażają, jakieś fakty złożone, dlatego często można w nich spotkać kilka predykatów połączonych odpowiednimi spójnikami (w przypadku tego laboratorium logicznymi, które podsumowuje tabela 1)

Tabela 1 Operatory logiczne w Prologu Operator Znaczenie, Koniunkcja, logiczne i : Alternatywa, logiczne lub \+ Negacja == Równe \= Różne 2. SWI-Prolog Jedną z implementacji języka Prolog jest SWI-Prolog. Jest to oprogramowanie darmowe, które można ściągnąć ze strony: www.swi-prolog.org. Po zainstalowaniu i uruchomieniu zobaczymy okno interpretera: w którym możemy rozpocząć wydawanie zapytań dla bazy wiedzy. Samą bazę wiedzy możemy zapisać w osobnym pliku (z rozszerzeniem.pl) i wczytać podczas uruchamiania programu (prolog nazwa_pliku.pl), lub skorzystać z wbudowanego edytora uruchamianego z menu File>New. Po wybraniu tej opcji z pliku zostaniemy poproszeni o podanie nazwy nowego pliku z bazą wiedzy, a następnie otwarte zostanie okno, w którym możemy wprowadzać fakty i reguły (rysunek 2)

Po zakończeniu wprowadzania danych należy wybrać opcję Compile > Compile buffer i jeżeli nie popełniliśmy żadnego błędu w oknie interpretera będziemy mogli wydawać zapytania. 3. Zadania Zadanie 1. Proszę zapisać w Prologu następujące fakty: a) Adam lubi muzykę. b) Barack Obama przyjechał do Polski. c) Antoni dał Ani czekoladę. d) Teofil zaliczy Paradygmaty Programowania Zadanie 2. Proszę zapisać reguły odpowiadające następującym stwierdzeniom. a) Jeżeli X jest dziadkiem Y to Y jest wnukiem lub wnuczką. b) Dwie osoby są rodzeństwem, jeżeli mają tych samych rodziców. c) Jeżeli student zaliczy Paradygmaty Programowania i zda egzamin z Baz danych to będzie miał spokojne wakacje. Zadanie 3. Proszę zapisać reguły, które opisują następujące relacje pokrewieństwa: a) matka(x,y). b) syn(x,y). c) brat(x, Y). d) dziadek(x,y). UWAGA! Być może konieczne będzie zdefiniowanie również innych reguł. Zadanie 4. Wyrazić w Prologu wszelkie relacje rodzinne takie jak: dziadek, babcia, syn, dziecko, córka, brat, siostra, stryj(brat ojca), wuj(brat matki), ciotka, potomek, przodek, kuzyn, żona, mąż, krewny, liczba potomków itd. dla dowolnej bazy danych, która zawiera relacje: ojciec(s,s), matka(s,s), plec(s,s)