Prolog. Materiały do wykładu Komputerowe Przetwarzanie Wiedzy Tomasz Kubik

Podobne dokumenty
Programowanie deklaratywne

Programowanie deklaratywne

PODSTAWY SZTUCZNEJ INTELIGENCJI

Programowanie deklaratywne

Programowanie w logice

Programowanie w Logice

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

Programowanie w logice

Języki programowania deklaratywnego

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.

Wprowadzenie do Prologa

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

Programowanie w logice Prolog 2

Programowanie deklaratywne

Języki programowania deklaratywnego

Projekt 4: Programowanie w logice

Programowanie w logice Prolog 1

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

Programowanie w Logice

Programowanie w logice Wykład z baz danych dla

Prezentacja do pobranie:

Laboratorium przedmiotu Paradygmaty Programowania

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Programowanie deklaratywne

Języki programowania Prolog

Wykład 0 Informacje Podstawowe

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

Oczywiście plik musi mieć rozszerzenie *.php

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

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

Algorytmika i Programowanie VBA 1 - podstawy

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

Powtórka algorytmów. Wprowadzenie do języka Java.

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

Programowanie deklaratywne

Powtórka algorytmów. Wprowadzenie do języka Java.

PROLOG. Programmation en Logique. Michał Bereta

Prolog struktury danych oraz obliczenia. 1. Arytmetyka?- Y is 2+2. Y = 4. ?- 5 is 3+3. false. ?- Z is (3.9 / 2.1). Z =

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

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

PROLOG INNE PRZYKŁADY MACIEJ KELM

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

Programowanie w Logice Struktury danych (Lista 2)

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

Podstawy języka PROLOG

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

Programowanie w logice

Wstęp do programowania

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Statyczne i dynamiczne predykaty

Podstawy programowania w Pythonie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

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

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

Specyfikacja zadania informatycznego nr 1

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

BAZY DANYCH. Obsługa bazy z poziomu języka PHP. opracowanie: Michał Lech

RBD Relacyjne Bazy Danych

Definicje wyższego poziomu

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

C++ wprowadzanie zmiennych

Bazy Danych i Usługi Sieciowe

JAVAScript w dokumentach HTML (1)

Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]

Systemy GIS Tworzenie zapytań w bazach danych

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

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Arkusz kalkulacyjny. Technologia Informacyjna Lekcja 38-39

Języki i paradygmaty programowania Wykład 7. dr Dariusz Wardowski, Katedra Analizy Nieliniowej Łódź, 22 maja 2010 r. 1/18

Definicje. Algorytm to:

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

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

Programowanie 2. Język C++. Wykład 3.

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

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

Metody numeryczne Laboratorium 2

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

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

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Języki skryptowe w programie Plans

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

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

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

ForPascal Interpreter języka Pascal

Cw.12 JAVAScript w dokumentach HTML

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

Składnia rachunku predykatów pierwszego rzędu

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

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

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Powtórka algorytmów. Wprowadzenie do języka Java.

Transkrypt:

Prolog Materiały do wykładu Komputerowe Przetwarzanie Wiedzy Tomasz Kubik

Programowanie w logice i Prolog n Programowania w logice (ang. logicprogramming) bazuje na regułach wnioskowania logicznego, które opracowano juŝ w staroŝytności (Aristoteles) n Odkryte na nowo w latach 1960 i 1970 przy okazji debaty nad uŝyciem deklaratywnej lub proceduralnej reprezentacji sztucznej inteligencji n Prolog (akronim od ang. PROgramminginLOGic) gsymboliczny język programowania (do obliczeń symbolicznych, nie do numerycznych) gstworzony w 1972 (autorami Alain Colmerauer oraz Philippe Roussel) n Istota programowania w Prologu gdefiniowanie faktów i relacji, zadawanie pytań o relacje g Interpreter?- zaczęta główna zachęta podrzędna 2

Dostępne implementacje Prologu n SWI-Prolog g http://www.swi-prolog.org/ n SWI-Prolog-Editor g http://lernen.bildung.hessen.de/informatik/swiprolog/indexe.htm n YAProlog g http://www.ncc.up.pt/~vsc/yap/ n Strawberry Prolog g http://www.dobrev.com/ n Visual Prolog g http://www.visual-prolog.com/ gsuccessor of Turbo Prolog (by Borland) n SICStus Prolog g http://www.sics.se/isl/sicstuswww/site/index.html n GNU GProlog g http://www.gprolog.org/ 3

Składnia n n Znaki g duŝe litery (A-Z), małe litery (a-z), cyfry (0-9), g symbole (+ - * / \ ^,. ~ :.? @ # $ &) Termy g liczby g g g zazwyczaj całkowite, choć mogą być teŝ zmiennoprzecinkowe atomy ciągi znaków zaczynające się małą literą (czlowiek, duzy_czlowiek) ciągi znaków zamieszczone a apostrofach ('dobry zart', '&^%&#@$ &*'), są to nazwy atomów ciągi znaków specjalnych (@= oraz ====> oraz;oraz:- ), niektóre mają predefiniowane znaczenie zmienne ciągi znaków zaczynające się od duŝej litery lub podkreślenia (X,_jakis) podkreśleniem zaczynają się zmienne anonimowe termy złoŝone składają się z funktora (ang. functor), który musi być atomem, oraz sekwencji argumentów rozdzielonych przecinkami, które mogą być czymkolwiek, umieszczonej w nawiasach (ojciec(x, ojciec(y, ela))) ilość argumentów to arność predykatu (do odwołań w tekście oznaczana liczbą po ukośniku, np. ojciec/1) mogą mieć strukturę rekursywną 4

Struktura programu n Kod zazwyczaj w pliku z rozszerzeniem.pl n Kod to sekwencja klauzul g fakty lub predykaty (pred(arg1, arg2, argn).) g reguły (head :- body.) termy w klauzuli mogą być rozdzielone przecinkami (, koniunkcja) lub średnikami (; alternatywa) pomiędzy termami moŝe pojawić się znak wykrzyknika (! odcięcie) g zapytanie lub cel (goal) g komentarze blokowe (/* This is a comment */) linijkowe (% This is also a comment) woman(mia). woman(jody). woman(yolanda). playsairguitar(jody). happy(yolanda). listenstomusic(yolanda):- happy(yolanda).?- woman(mia). yes?- playsairguitar(mia). no 5

Wczytanie kodu n Kod z pliku moŝna wczytać do interpretera g polecenie consult(nazwapliku). n Fakty mogą być dołączane lub usuwane dynamicznie g polecenie dołączania zawsze kończy się sukcesem (assert(fakt).) g polecenie usuwania moŝe zakończyć się niepowodzeniem (retract(fakt).) assert(mammal(rat)). assert(mammal(bear)). assert(fish(salmon)). mammal(bear). yes fish(rat). no fish(x). X = salmon mammal(x). X = rat; X = bear. 6

Zadanie pytania n Zapytania wprowadza się po znaku zachęty?- n Zapytania mają postać termów n Jeśli istnieje fakt pasujący do celu zapytania, wtedy zapytanie kończy się sukcesem i generowana jest odpowiedźyes n Jeśli nie istnieje fakt pasujący do celu zapytania, zapytanie kończy się poraŝką i odpowiedziąno. n Jeśli zapytanie zawiera zmienną, znajdowane i wypisywane są wszystkie znalezione dla niej dopasowania (po znaku ;) room(kitchen). room('dinning room'). room(cellar).?- room(x). X = kitchen ; X = 'dinning room' ; X = cellar. 7

Reguły n SłuŜą do tworzenia nowych predykatów gzazwyczaj z uŝyciem zmiennych i rekurencją, która jest realizacją jakiegoś algorytmu n Przykład gdla wszystkich X i Y X jest w łańcuchu pokarmowym Y-ka jeśli: Y zjada X lub Y zjada jakieś Z i X jest w łańcuchu pokarmowym Z-ta food_chain(x,y) :- eats(y,x). food_chain(x,y) :- eats(y,z), food_chain(x,z). 8

Dopasowanie n Dwa termy są dopasowane jeśli: g są identyczne lub dla zmiennych w obu termach moŝna znaleźć takie obiekty, Ŝe po ich podstawieniu w miejsce zmiennych termy stają się identyczne, a inaczej mówiąc: n Inaczej mówiąc: g Jeśli S i T są stałymi, to S pasuje do T tylko jeśli oba są tym samym obiektem g Jeśli S jest zmienną, a T czymkolwiek, to pasują do siebie i S staje się instancją T. g Jeśli S i T są złoŝone, to zostaną dopasowane tylko jeśli S i T mają ten sam główny funktor i taką samą liczbę komponentów i wszystkie odpowiadające sobie komponenty pasują do siebie Końcowy wynik dopasowania określony jest przez dopasowanie komponentów course(n,s,95) pasuje do course(x,fall,g) course(n,s,95) nie pasuje do course(y,m,996) course(x) nie pasuje do semester(x) g jeśli dopasowanie zakończy się sukcesem, zwracany wynik jest zawsze jak najbardziej ogólny course(n,m,85) = course(n1,fall,g). N = N1 M=fall G=85 9

Przykład dopasowania point(1,1). seg( point(1,1), point(2,3) ). triangle( point(4,2), point(6,4), point(7,1) ).?- triangle(point(1,1), A, point(2,3)) = triangle(x, point(4,y), point(2,z)). A = point(4,y) X = point(1,1) Z = 3 triangle = triangle point(1,1) = X A = point(4,y) point(2,3) = point(2,z) 10

f(a). f(b). g(a). g(b). h(b). k(x) :- f(x),g(x),h(x).?- k(x). X = b. Przykład dopasowania 11

loves(vincent,mia). loves(marcellus,mia). jealous(x,y) :- loves(x,z),loves(y,z).?- jealous(x,y). X = vincent, Y = vincent ; X = vincent, Y = marcellus ; X = marcellus, Y = vincent ; X = marcellus, Y = marcellus. 12

Arytmetyka n Predefiniowane operatory podstawowych operacji arytmetycznych +, -, *, /, mod n Jeśli nie zaŝądano wprost, operatowy traktowane są jak kaŝda inna relacja?- X = 1 + 2. X=1+2 n Wymuszenie wykonania operacji zapewnia uŝycie słówka is?- X is 1 + 2. X=3 n A is B (gdzie A i B mogą być czymkolwiek) wymusza dokonanie oszacowania wartości B, po którym znajdowane jest dopasowanie otrzymanego rezultatu (liczby) do A n UŜycie operatorów porównania równieŝ wymusza dokonanie oszacowanie wartości?- 145 * 34 > 100. true. 13

Operatory logiczne n X > Y, X < Y, X >= Y, X =< Y n X =:= Y (równe wartości X i Y), X =\= Y (róŝne wartości X i Y) goperator =:= wymusza dokonanie oszacowanie wartości, jednak w odróŝnieniu od = nie powoduje dopasowania?- 1 + 2 =:= 2 + 1. true.?- 1 + 2 = 2 + 1. false.?- 1 + A = B + 2. A = 2 B = 1?- 1 + A =:= B + 2. ERROR: =:=/2: Arguments are not sufficiently instantiated 14

Przykład największego wspólnego dzielnika n Dla danych X i YgcdDobliczyć moŝna następująco: g jeśli X i Y są równe to D równa sięx. g jeśli X < Y to D jest gcdxi (Y-X). g jeśli Y < X to D jest gcd Y i (X-Y). 15

Listy n Są to sekwencje elementów w wyróŝnioną głową i ogonem n Synonimy: [tom, jerry].(tom,.(jerry, [])) [a tail].(a, tail) [a,b,c] = [a [b,c]] = [a,b [c]] = [a,b,c []] n Elementami listy mogą być listy i termy (w tym termy złoŝone) [a, [1, 2, 3], tom, 1995, date(1,may,1995) ] 16

n PrzynaleŜność Operacje na listach g member( X, L) jeśli X naleŝy do L. member(x, [X Tail]). member(x, [Head Tail]) :- member(x, Tail). n Złączenie gconc(l1, L2, L3) jeśli L3 jest złączeniem L1 i L2. conc([], L, L). conc([x L1], L2, [X L3]) :- conc(l1, L2, L3). 17

Przykłady operacji na listach?- conc( [a,b,c], [1,2,3], L). L = [a,b,c,1,2,3]?- conc( L1, L2, [a,b,c] ). L1 = [], L2 = [a, b, c] ; conc([], L, L). L1 = [a], conc([x L1], L2, [X L3]) :- L2 = [b, c] ; L1 = [a, b], conc(l1, L2, L3). L2 = [c] ; L1 = [a, b, c], L2 = [] ; false.?- conc( Before, [4 After], [1,2,3,4,5,6,7]). Before = [1, 2, 3], After = [5, 6, 7] ; false.?- conc(_, [Pred, 4, Succ _], [1,2,3,4,5,6,7]). Pred = 3; Succ = 5. 18

Przykłady operacji na listach n Definicja członkostwa za pomocą złączenia member1(x, L) :- conc(_, [X _], L). n Dodanie elementu na początek add(x, L, [X L]). n Usuwanie jednego elementu del(x, [X Tail], Tail). del(x, [Y Tail], [Y Tail1]) :- del(x, Tail, Tail1). n Usuwanie moŝna uŝyć do wstawiania?- del(a, L, [1,2,3]). L = [a,1,2,3]; L = [1,a,2,3]; L = [1,2,a,3]; L = [1,2,3,a]; false. 19

n Wstawianie za pomocą usuwania insert(x,list,biggerlist) :- del(x, BiggerList, List). n Podlista sublist(s, L) :- conc(l1, L2, L), conc(s, L3, L2).?- sublist(s, [a,b,c]). S = []; S = [a];... S = [b,c];... 20

permutation([], []). permutation([x L], P) :- permutation(l, L1), insert(x, L1, P).?- permutation( [a,b,c], P). P = [a,b,c]; P = [a,c,b]; P = [b,a,c];... permutation2([], []). permutation2(l, [X P]) :- del(x, L, L1), permutation2(l1, P). 21

n Długość listy (nadpisanie wbudowanego predykatu) length([], 0). length([_ Tail],N) :- length(tail, N1), N is 1 + N1.?- length([a,b,[c,d],e], N). N = 4?- length(l,4). [_5, _10, _15, _20] ;...? 22