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

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

Wprowadzenie do Prologa

Laboratorium przedmiotu Paradygmaty Programowania

Programowanie w logice

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

Języki programowania deklaratywnego

Programowanie w języku Python. Grażyna Koba

Programowanie deklaratywne

Programowanie w Logice

Języki programowania deklaratywnego

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

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.

PROLOG. Programmation en Logique. Michał Bereta

Dana jest baza: kobieta(katarzyna). kobieta(anna). kobieta(maria). kobieta(marianna). kobieta(marta). Zdefiniujemy predykat kobiety/0 następująco:

Prezentacja do pobranie:

Programowanie deklaratywne

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

Projekt 4: Programowanie w logice

Programowanie w logice Prolog 2

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

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

Programowanie w logice

Python wstęp. Michał Bereta

Podstawy języka PROLOG

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

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

Programowanie deklaratywne

Paradygmaty programowania

a) Przypomnienie wiadomości o ułamkach zwykłych. licznik

Programowanie w logice Prolog 1

Programowanie w logice

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

Programowanie w językach wysokiego poziomu

Instalacja

Programowanie w logice Wykład z baz danych dla

Języki programowania Prolog

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Statyczne i dynamiczne predykaty

Warsztaty dla nauczycieli

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

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

Dokumentacja programu. Zoz. Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ. Wersja

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

Programowanie w Logice Struktury danych (Lista 2)

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.

Pascal - wprowadzenie

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

P R OGRA M OW A N I E KOMPUTERÓW Ćwiczenia laboratoryjne

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

1 Podstawy c++ w pigułce.

Bazy danych kwerendy (moduł 5) 1. Przekopiuj na dysk F:\ bazę M5KW.mdb z dysku wskazanego przez prowadzącego

Schematy blokowe. Algorytmy Marek Pudełko

Zakład Systemów Rozproszonych

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

1. Operacje na plikach i katalogach Chcąc przeprowadzić analizę danych należy załadować/wczytać dane do R, a wyniki z pewnością chcemy zapisać.

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

1. Operacje na plikach i katalogach Chcąc przeprowadzić analizę danych należy załadować/wczytać dane do R, a wyniki z pewnością chcemy zapisać.

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

WYKONYWANIE ORAZ PRZYWRACANIE KOPII KONFIGURACJI ZA POMOCĄ INTERFEJSU 20-HIM-A6 / 20-HIM-C6S W PRZEMIENNIKACH SERII POWERFLEX 750

Instalacja Pakietu R

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Podstawy tworzenia i redagowania tekstów specjalistycznych Dokumentacja techniczna

4. Funkcje. Przykłady

Jerzy Nawrocki, Wprowadzenie do informatyki

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

Wprowadzenie do Pakietu R dla kierunku Zootechnika. Dr Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Instalacja i obsługa aplikacji MAC Diagnoza EP w celu wykonania Diagnozy rozszerzonej

Zastanawiałeś się może, dlaczego Twój współpracownik,

Systemy operacyjne 11

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

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

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

Programowanie w Logice

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Zad. 1: Sterowanie mimika

Utworzenie pliku. Dowiesz się:

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

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

lekcja 8a Gry komputerowe MasterMind

Wstęp do informatyki- wykład 2

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

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

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

Zasady programowania Dokumentacja

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Programowanie strukturalne i obiektowe. Funkcje

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Programowanie deklaratywne

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

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

Transkrypt:

PROLOG 1. Informacje wstępne Podczas zajęć korzystamy z darmowej wersji interpretera Prologu SWI-Prolog dostępnego ze strony: www.swi-prolog.org 2. Literatura i materiały Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd. PLJ w Internecie: po polsku: http://www.im.pwr.wroc.pl/~przemko/prolog/ http://free.of.pl/p/prolog/strona2/prolog.php po angielsku: http://www.compapp.dcu.ie/~alex/logic/start.html http://kti.ms.mff.cuni.cz/~bartak/prolog/ http://www.amzi.com/adventureinprolog/ http://computing.unn.ac.uk/staff/cgpb4/prologbook/book.html http://appsrv.cse.cuhk.edu.hk/~csc4510/prolog/tutorial.1/1.htm http://cs.wwc.edu/ku/pr/prolog.html#extralogical http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html http://www.cs.may.ie/~jpower/courses/prolog/ manual SWI-Prolog http://www.swi-prolog.org/documentation.html 3. Prolog, wstęp Prolog jest językiem programowania w logice. W przeciwieństwie do popularnych proceduralnych języków programowania (C, PASCAL,...) Prolog jest językiem deklaratywnym. Oznacza to, ze pisząc program w Prologu, skupiamy się na definicjach obiektów i związkach między nimi, a nie na sposobie wykonania danego zadania. Nacisk zatem jest położony na to CO obliczyć zamiast JAK obliczyć. Zadaniem programisty jest zapisać logiczną strukturę problemu, sterowanie wykonaniem natomiast zostawiamy tzw. interpreterowi Prologu. Program w Prologu składa się przede wszystkim z: - FAKTÓW - REGUŁ - ZAPYTAŃ

4. Hello Word w Prologu Ucząc się nowego języka programowania, często pierwszym programem pisanym przez początkującego programistę jest program wyświetlający pozdrowienia na ekranie. W Prologu podobna funkcje pełni program, który odpowiada na pytanie co kto lubi. Zad. 1 Definicja faktów Stwórz nowy plik tekstowy i zapisz go pod nazwa lubi.pl. Edytuj jego treść. Zapisz w nim: lubi(jarek, jablko). lubi(jarek, gruszka). lubi(kasia, piwo). lubi(kasia, hamburger). Pamiętaj o kropce na końcu! Uruchom interpreter prologu. Załaduj utworzony plik do pamięci poleceniem: consult( sciezka_do_pliku ). lub [sciezka_do_pliku]. Lub wybierając polecenie consult z menu File. Wpisz następujące zapytania:?-lubi(jarek, piwo).?-lubi(kasia, hamburger). Baza znanych faktów zostaje przeszukana w takiej kolejności w jakiej fakty zostały wprowadzone i jeśli napotkany zostanie fakt, o który pytamy, odpowiedź będzie pozytywna, a zatem prawdziwość faktu zostanie potwierdzona. Jeśli taki fakt nie zostanie znaleziony, Prolog odpowiada nie. Nie w Prologu nie oznacza, ze coś jest nieprawdziwe, a raczej że Prolog na podstawie znanych mu faktów (i reguł) nie jest w stanie go potwierdzić. 5. FAKTY W powyższym przykładzie zostały zapisane fakty typu: jarek lubi jabłka. Fakty mogą również przyjmować postać: czlowiek(jarek). jarek jest człowiekiem rodzice(maria, stefan, henio). maria oraz stefan są rodzicami henia ladna_pogoda. fakt; jeśli zapytamy?-ladna_pogoda. to otrzymamy odpowiedź twierdzącą. W powyższych przykładach człowiek, rodzice, ladna_pogoda są predykatami. Należy pamiętać o kropkach kończących deklaracje każdego faktu.

Fakty mogą być zapisane za pomocą bardziej skomplikowanych struktur: ksiazka(tytul( Ogniem i mieczem ), autor(henryk, sienkiewicz), 42353). 6. Stałe i zmienne W prologu stałe pisane są z małej litery (np. jarek, książka). Zmienne pisane są z dużej litery lub zaczynają się od znaku podkreślenia, np. X _zmienna Zmienna Zmienne można wykorzystać do zadawania bardziej interesujących pytań Prologowi: Zad 2. Wpisz zapytanie:?- lubi(kasia, X). Naciśnięcie ENTER powoduje zakończenie poszukiwań kolejnych rozwiązań. Naciśniecie ; powoduje poszukiwanie alternatywnych rozwiązań. Średnik jest w Prologu oznaczeniem logicznej operacji OR. Wpisz kolejne zapytania:?-lubi(x, jablko).?-lubi(x,y). Do zmiennych przypisywane są kolejne znalezione wartości (uzgadnianie), które pasują do zapytania. Odbywa się to w procesie zwanym nawracaniem. 7. Reguły Zapiszmy regułę, że stefan lubi coś, jeśli tylko to cos jest slodkie i zdrowe. lubi(stefan, X) :- slodkie(x), zdrowe(x). Reguła składa się głowy reguły oraz ciała. Aby spełniona była przesłanka reguły, spełnione muszą być wszystkie jej podcele, w tym przypadku oddzielone przecinkiem, co w Prologu oznacza logiczne AND. Wprowadź do bazy fakty: slodkie(jablko). slodkie(czekolada). zdrowe(jablko). i zapytaj co lubi stefan. Jak widać, stefan lubi jablka. Prolog znalazł tą odpowiedź, mimo że w zbiorze faktów nie było wprost powiedziane, ze stefan lubi jablka. stefan nie lubi natomiast

czekolady, gdyż mimo iż słodka, nie jest zdrowa (przynajmniej nic o jej zdrowotnym wpływie nie jest Prologowi wiadomo...). Zad. 3 Stwórz nowy plik z następującą zawartością i załaduj go do pamięci: mezczyzna(adam). mezczyzna(stefan). mezczyzna(staszek). mezczyzna(marek). kobieta(ala). kobieta(alina). kobieta(maria). kobieta(ania). rodzice(stefan, staszek, maria). rodzice(ala, staszek, maria). rodzice(ania, marek, alina). Predykat rodzice(x,y,z) okresla, ze ojcem X jest Y a matką Z. Zadaj pytanie, kim są rodzice stefana, kogo ojcem jest staszek. UWAGA. Jeśli chcemy zapytać na przykład tylko o ojca stefana, możemy w miejsce zmiennej oznaczającej matkę wstawić zmienna anonimową _. rodzice(stefan, Ojciec, _). Zad. 4 Stwórz regułę określającą, kiedy X jest siostrą Y. siostra(x,y) :-... Zad. 5 Stwórz regułę mówiącą, że stefan lubi każdego, kto lubi piwo. lubi(stefan, X) :-... 8. Arytmetyka Prolog umożliwia operacje na liczbach, pamiętać jednak trzeba o różnicach w zapisie: X = 3*4+2. a zapisem X is 3*4+2. Wypróbuj również zapytanie: X=3*4+2, display(x).

Na stronie http://gollem.science.uva.nl/swi-prolog/manual/arith.html sprawdź, jakie możliwości daje SWI-Prolog jeśli chodzi o działania arytmetyczne. Zad. 6 Jak obliczyć dwukrotną wartość podanej liczby, jeśli ta liczba jest większa od 4? pomnoz_2(x, Wynik) :- X > 4, Wynik is 2*X. Czy pomnoz_2(x, Wynik) :- X>4, Wynik = 2*X. Co zrobić, aby jeśli X jest mniejsze od 4 Wynik miał taką samą wartość jak X? Przyjrzyj się przykładowi poniżej: pom(x,w):-x>4, W is X*2. pom(x,w):-w is X. Widać, że jeśli nie jest spełniony warunek w pierwszej klauzuli predykatu pom, to wykorzystana jest druga reguła. Prawidłowo zatem Prolog odpowie na pytanie: pom(2, Wynik). Problem jest natomiast gdy zadamy pytanie: pom(5, Wynik). Pierwsza odpowiedz jest prawidłowa, jeśli jednak zapytamy o alternatywę (naciśniemy średnik), dostaniemy drugą odpowiedź, wywnioskowaną z drugiej reguły. Aby uniknąć takich sytuacji często stosuje się mechanizm odcięcia zapisywany jako wykrzyknik (!). pom(x,w):-x>4, W is X*2,!. pom(x,w):-w is X. Odcięcie powoduje, że po dojściu do danego miejsca, Prolog nie będzie próbował uzgadniać ponownie celów stających po lewej stronie znaku!, w naszym przypadku chodzi o cel główny jakim jest pytanie pom(5,wynik).. Sprawdź działanie poprawionego predykatu pom. Zad. 7 Zbuduj bazę wiedzy, w której zawarta będzie informacjach, w jakich latach rządzili królowie: np. krol(jan_i, 1323, 1355).

oznacza, że jan_i rzadzil od 1323 roku do 1355 roku. Napisz regułę umożliwiającą zadawanie pytań, kto rządził w danym roku. rzadzil(krol, Rok) :-... 9. Zobacz jak wykonywane jest porównywanie termów w Prologu. http://gollem.science.uva.nl/swi-prolog/manual/compare.html