Programowanie deklaratywne

Podobne dokumenty
Programowanie deklaratywne

Programowanie deklaratywne

Programowanie deklaratywne

Programowanie w logice

PODSTAWY SZTUCZNEJ INTELIGENCJI

Programowanie deklaratywne

Programowanie deklaratywne

Języki programowania deklaratywnego

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

Programowanie w logice

Programowanie w Logice

Języki programowania deklaratywnego

Dziedziczenie jednobazowe, poliformizm

Algorytmy i struktury danych

Adam Meissner STUCZNA INTELIGENCJA

Programowanie w logice Prolog 2

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

Interpreter - EasyCompile

Uzgadnianie formuł rachunku predykatów

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

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

ZMIENNE. Podstawy PHP

Składnia rachunku predykatów pierwszego rzędu

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

L E X. Generator analizatorów leksykalnych

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Wykład 0 Informacje Podstawowe

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

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

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

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

Zadanie analizy leksykalnej

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

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

Programowanie w logice

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

Dedukcyjne bazy danych

Programowania w Javie

Technologie baz danych

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

Teoria automatów i języków formalnych. Określenie relacji

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

Programowanie w logice Prolog 1

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

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

Gramatyki atrybutywne

Rachunek zdań. Zdanie w sensie logicznym jest to wyraŝenie jednoznacznie stwierdzające, na gruncie reguł danego języka, iŝ tak a

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Statyczne i dynamiczne predykaty

Programowanie w Logice Struktury danych (Lista 2)

Projekt 4: Programowanie w logice

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

Problem. Uzgadnianie wyrażeń rachunku predykatów. Instancja wyrażenia. Podstawienie termu za zmienną. Joanna Józefowska

Zmienne, stałe i operatory

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

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

Oczywiście plik musi mieć rozszerzenie *.php

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

PARADYGMATY PROGRAMOWANIA Wykład 4

Relacyjne bazy danych. Podstawy SQL

Wstęp do informatyki- wykład 2

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

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

RBD Relacyjne Bazy Danych

Modele Herbranda. Logika obliczeniowa. Joanna Józefowska. Szukamy modelu. Przykład Problemy. Model Herbranda

Programowanie w logice Wykład z baz danych dla

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

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

14. Grupy, pierścienie i ciała.

1 Powtórzenie wiadomości

ARYTMETYKA KOMPUTERA

Podstawy i języki programowania

Metody Kompilacji Wykład 3

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Wykład 5: Klasy cz. 3

Elementy kognitywistyki III: Modele i architektury poznawcze

Lab 9 Podstawy Programowania


MATERIAŁY DO ZAJĘĆ II

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

Wykład 8: klasy cz. 4

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

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

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

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

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

Wstęp do programowania

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

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

Algorytmy i struktury danych

Semantyka rachunku predykatów pierwszego rzędu. Dziedzina interpretacji. Stałe, zmienne, funkcje. Logika obliczeniowa.

Wstęp do informatyki. Pojęcie liczebności. Zapis liczb. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

ForPascal Interpreter języka Pascal

Transkrypt:

Programowanie deklaratywne Artur Michalski Informatyka II rok Plan wykładu Wprowadzenie do języka Prolog Budowa składniowa i interpretacja programów prologowych Listy, operatory i operacje arytmetyczne Sterowanie mechanizmem nawrotów Predefiniowane procedury prologowe Styl i technika programowania w Prologu 1

Budowa składniowa i znaczenie programów w Prologu Związki języka Prolog z logiką formalną Podsumowanie Klasyfikacja rodzajów danych w Prologu dane proste złoŝone stałe zmienne nazwy liczby 2

Atomy - składają się z: duŝych liter: A, B,..., Z małych liter: a, b,..., z cyfr: 0, 1,..., 9 znaków specjalnych: +-*/<>=:.&_~ i są ciągami: liter, cyfr i znaków podkreślenia (zaczynającymi się od małej litery): anna, x12, y_, _z, a_b znaków specjalnych: <--->, ===>,.:. lub napisami: Ania, co to, kto_to Zmienne - ciągi liter, cyfr i znaków podkreślenia zaczynające się od duŝej litery lub podkreślenia Zmienna anonimowa - tylko znak podkreślenia ma_dziecko(x) :- rodzic(x,y). poniewaŝ konkluzja klauzuli nie zaleŝy od wartości zmiennej Y, moŝna ją zastąpić przez zmienną nie posiadającą identyfikatora tzw. zmienną anonimową: ma_dziecko(x) :- rodzic(x,_). 3

Zmienna anonimowa c.d. KaŜde wystąpienie zmiennej anonimowej w danej klauzuli reprezentuje inną zmienną ktos_ma_dziecko :- rodzic(_,_). jest równowaŝne: ktos_ma_dziecko :- rodzic(x,y). a nie: ktos_ma_dziecko :- rodzic(x,x). Jeśli zmienna anonimowa zostanie uŝyta w pytaniu, jej wartość nie zostanie wyświetlona: Które osoby mają dzieci (bez wskazywania samych dzieci)? Zapis w Prologu:?- rodzic(x,_). Odpowiedź: X = tomek;... 4

Zasięg leksykalny zmiennej (identyfikatora) ograniczony jest tylko do jednej klauzuli: ma_dziecko(x) :- rodzic(x,_). dziecko(x,y) :- rodzic(y,x). zmienna X oznacza inną zmienną w kaŝdej z klauzul, czyli: ma_dziecko(x1) :- rodzic(x1,_). dziecko(x2,y) :- rodzic(y,x2). Dane złoŝone (strukturalne) - dane, które składają się z kilku elementów, tworzących jeden obiekt; w szczególności składowymi struktury mogą być równieŝ dane złoŝone Dane złoŝone tworzone są za pomocą funktora i argumentów traktowanych razem jako jeden obiekt programu Zapis daty w Prologu date(1,october,2000) 5

Składowymi (argumentami) danych złoŝonych (strukturalnych) mogą być zarówno stałe, jak i zmienne prologowe: Dowolny dzień marca 2000 roku: date(day,march,2000) zmienna! Wszystkie dane strukturalne w Prologu mogą być reprezentowane za pomocą drzew, którego korzeniem jest funktor a węzłami potomnymi - jego argumenty date(1,june,1983) date 1 june 1983 6

reprezentacji danych strukturalnych P1 jako (1,1) P2 jako (2,3) S jako seg(p1,p2) czyli seg((1,1),(2,3)) T jako triangle((4,2),(6,4),(7,1)) 5 4 3 2 1 S P1 P2 0 0 1 2 3 4 5 6 7 8 T Drzewiasta reprezentacja tych danych P1 S seg 1 1 1 1 2 3 T triangle 4 2 6 4 7 1 7

Dane strukturalne określone są zarówno przez nazwę funktora, jak i liczbę argumentów tzw. arność. Oznacza to, iŝ dwa funktory o tej samej nazwie, lecz innej arności są róŝnymi obiektami. Punkt w przestrzeni 2-wymiarowej: (7,3) punkt w przestrzeni 3-wymiarowej: (7,3,1) funktor i 2 argumenty funktor i 3 argumenty Inny przykład zastosowania struktur seq(r1,r2) par(r1,par(r2,r3)) r1 r1 r1 r2 r3 par(r1,r2) par(r1,seq(par(r2,r3),r4)) r1 r1 r2 r2 r4 r3 8

Pojęcie formalne termu Do termów zaliczamy: stałe i zmienne prologowe struktury reprezentowane za pomocą funktorów o dowolnej arności, których argumentami są inne termy O uzgodnieniu dwóch termów mówimy wtedy, gdy: termy są identyczne lub, zmienne zawarte w obu termach mogą przyjąć wartości, dla których termy te staną się identyczne Termy:date(D,M,1993) idate(d1,may,y1) moŝna uzgodnić, gdy: D przyjmie wartośćd1 M przyjmie wartośćmay Y1 przyjmie wartość1993 9

Proces uzgadniania moŝe zakończyć się poraŝką, kiedy nie istnieje Ŝadne moŝliwe podstawienie zmiennych, które spowodowałoby, iŝ termy będą identyczne. Termów:date(D,M,1993) idate(d1,m1,1644) nie moŝna dopasować, bo:1993 i 1644, to róŝne stałe numeryczne. Podobniedate(X,Y,Z) i (X,Y,Z), bo: date i, to róŝne funktory. Operator uzgadniania w Prologu oznaczany jest znakiem =. Proces uzgadniania moŝe być jawnym elementem zapytań i kodu programu prologowego.?- date(d,m,1993)=date(d1,may,y1). moŝna uzgodnić, gdy:d=1,d1=1,m=may,y1=1993 albod=third,d1=third,m=may,y1=1993 albo... lecz podstawienia te nie są najogólniejsze, w przeciwieństwie do: D=D1,M=may,Y1=1993 10

Mechanizm uzgadniania w Prologu zawsze wyznacza najogólniejszy moŝliwy unifikator, tzn. taki zbiór podstawień zmiennych, który w najmniejszym moŝliwym stopniu ogranicza zbiór wartości zmiennych.?- date(d,m,1993)=date(d1,may,y1), date(d,m,1993)=date(15,m,y). najpierw: D=D1 ostateczny D=15 M=may rezultat: D1=15 Y1=1993 M=may Y1=1993 Y=1993 Przebieg procesu uzgadniania termów S i T w Prologu: JeŜeli dwa termy S i T, są stałymi, to uzgodnienie zachodzi, gdy są identyczne, JeŜeli S jest zmienną a T dowolnym termem, to uzgodnienie zachodzi, gdy S przypiszemy wartość T; podobnie w sytuacji odwrotnej, kiedy T jest zmienną, a S dowolnym termem, to uzgodnienie zajdzie, gdy T przypiszemy wartość S JeŜeli S i T są obiektami złoŝonymi, to uzgodnienie zachodzi, gdy: S i T mają ten sam funktor, i zachodzi uzgodnienie pomiędzy wszystkimi ich składowymi Ostateczny rezultat zaleŝy wtedy od uzgodnienia poszczególnych składowych - jest złoŝeniem ich uzgodnień. 11

?- triangle((1,1),a,(2,3))= triangle(x,(4,y),(2,z)). 1 1 X triangle A triangle 4 Y 2 3 2 Z Proces uzgadniania przebiega rekurencyjnie od korzenia do liści struktur drzewiastych, reprezentujących dopasowywane termy. 1 1 X triangle A triangle 4 Y 2 3 2 Z 12

Proces uzgadniania przebiega od korzenia do liści struktur drzewiastych, reprezentujących dopasowywane termy. Poszczególne etapy procesu uzgadniania: triangle=triangle, (1,1)=X, A=(4,Y), (2,3)=(2,Z). Sukces uzgodnienia końcowego wynika z udanych uzgodnień poszczególnych składowych termów: X=(1,1) A=(4,Y) Z=3 Proces uzgadniania moŝe być wykorzystany sam w sobie do przeprowadzenia pewnych obliczeń. Sprawdzenie czy odcinek jest pionowy, czy teŝ poziomy? Zapis własności za pomocą klauzul w Prologu: vertical(seg((x,y1),(x,y2))). horizontal(seg((x1,y),(x2,y))). Zapytanie w Prologu:?- vertical(seg((1,1),(1,2))). Yes?- horizontal(seg((1,1),(2,y))). Y=1 13

Zapytanie bardziej ogólne: Czy istnieje odcinek pionowy zaczynający się w punkcie (2,3)??- vertical(seg((2,3),p)). P=(2,Y) Zapytanie jeszcze ogólniejsze: Czy istnieje odcinek zarówno pionowy, jak i poziomy??- vertical(s),horizontal(s). S=seg((X,Y),(X,Y)) odpowiedź jest twierdząca, gdyŝ kaŝdy odcinek zdegenerowany do punktu jest zarówno pionowy, jak i poziomy. Związki języka Prolog z logiką formalną Podstawowe pojęcia logika predykatów I rzędu klauzule Horn a skolemizacja zasada rezolucji pojęcie najogólniejszego unifikatora (MGU) mechanizm unifikacji (uzgadniania) 14

Podsumowanie Proste obiekty w Prologu to atomy,stałe, zmienne. Obiekty proste i złoŝone (strukturalne) to termy. Termy składają się z funktora (operatora, symbolu funkcyjnego), określonego przez nazwę i arność oraz jego argumentów Typ obiektu jest rozpoznawany jedynie w oparciu o jego budowę składniową (brak mechanizmu deklaracji) Zakresem leksykalnym zmiennej jest jedna klauzula, zatem zmienne o tej samej nazwie w róŝnych klauzulach są róŝne Termy moŝna reprezentować w postaci drzew, zaś ich przetwarzanie traktować jako przetwarzanie struktur drzewiastych Podsumowanie Proces uzgadniania polega na sprawdzeniu czy dwa termy są identyczne lub stwierdzeniu dla jakich podstawień zmiennych termy będą takie same JeŜeli proces uzgadniania zmiennych zakończy się sukcesem, to w wyniku otrzymujemy najogólniejsze moŝliwe podstawienia zmiennych 15