Programowanie deklaratywne

Podobne dokumenty
Programowanie deklaratywne

Prolog przetwarzanie list. Maciej Krzywonos Łukasz Dajcz

Programowanie deklaratywne

Programowanie deklaratywne

Programowanie w logice Prolog 2

Programowanie deklaratywne

Programowanie w logice

Laboratorium nr 3 - Sztuczna Inteligencja Listy i operacje na listach

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 1

Projekt 4: Programowanie w logice

PODSTAWY SZTUCZNEJ INTELIGENCJI

Programowanie deklaratywne

Programowanie w Logice Struktury danych (Lista 2)

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

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Języki programowania deklaratywnego

Języki programowania Prolog

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

Podstawy języka PROLOG

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

MATEMATYKA DYSKRETNA, PODSTAWY LOGIKI I TEORII MNOGOŚCI

Definicje wyższego poziomu

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Zadanie 1. Potęgi (14 pkt)

1 Wstęp do modelu relacyjnego

Listy, kolejki, stosy

Dziedziczenie jednobazowe, poliformizm

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

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

Odwrotna Notacja Polska

Wykład 8: klasy cz. 4

Wstęp do programowania

Programowanie w logice

Wprowadzenie do Prologa

Programowanie w logice

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

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

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

Laboratorium podstaw elektroniki

Dynamiczne struktury danych

Uzgadnianie formuł rachunku predykatów

Semantyka rachunku predykatów

FUNKCJE. (odwzorowania) Funkcje 1

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie w logice Wykład z baz danych dla

- 2 (50pkt) - około końca semestru, przedostatni tydzień (dyskusyjne). Tylko PROLOG, będzie się wiązał w dużej mierze z projektem.

Wykład 0 Informacje Podstawowe

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

Tabela wewnętrzna - definicja

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

Metody Kompilacji Wykład 3

Paradygmaty programowania

Jest to zasadniczo powtórka ze szkoły średniej, być może z niektórymi rzeczami nowymi.

Gramatyki atrybutywne

Algorytmika i Programowanie VBA 1 - podstawy

Wstęp do informatyki- wykład 2

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

Technologie i systemy oparte na logice rozmytej

TEORETYCZNE PODSTAWY INFORMATYKI

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

Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska.

Twierdzenia Gödla dowody. Czy arytmetyka jest w stanie dowieść własną niesprzeczność?

Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Matematyka ETId Elementy logiki

Wyrażenia regularne.

Teoretyczne podstawy informatyki

5. Algebra działania, grupy, grupy permutacji, pierścienie, ciała, pierścień wielomianów.

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

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Maszyna Turinga języki

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

Podstawy programowania funkcjonalnego

JĘZYKI PRZETWARZANIA SYMBOLICZNEGO

Rekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne

Logika Matematyczna (1)

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

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

Elementy rachunku lambda. dr hab. inż. Joanna Józefowska, prof. PP 1

Algorytmy i Struktury Danych.

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

Techniki Programowania wskaźniki

Przykładowe dowody formuł rachunku kwantyfikatorów w systemie tabel semantycznych

Przeciążanie operatorów

Programowanie w Logice

Podstawy informatyki 2

Język C zajęcia nr 11. Funkcje

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

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

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

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

Rezolucja w rachunku predykatów. Przedrostkowa koniunkcyjna postać normalna. Formu ly ustalone. Joanna Józefowska. Poznań, rok akademicki 2009/2010

Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:

5. OKREŚLANIE WARTOŚCI LOGICZNEJ ZDAŃ ZŁOŻONYCH

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

Teoretyczne podstawy informatyki

Oracle11g: Wprowadzenie do SQL

Wybierz cztery z poniższych pięciu zadań. Poprawne rozwiazanie dwóch zadań oznacza zdany egzamin.

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

Listy, operatory i operacje arytmetyczne Reprezentacja list w Prologu Notacja operatorów Operacje arytmetyczne w Prologu Reprezentacja list w Prologu Lista to dowolnej długości ciąg termów zapisywany w postaci: [element1,element2,...] Reprezentacja wewnętrzna listy odpowiada strukturze drzewiastej:. funktor binarny termu tworzącego listę element1... element2. [] lista pusta 2

Reprezentacja list w Prologu Budowa listy (niepustej): głowa - pierwszy element listy, ogon - pozostałe elementy listy Własności: Głową listy moŝe być dowolny obiekt języka Prolog np. inna lista, zmienna, czyli dowolny term Ogon listy jest zawsze listą i moŝe być listą pustą Lista jest strukturą rekurencyjną - jeŝeli ogon jest niepusty, to równieŝ on składa się z głowy i z ogona Reprezentacja list w Prologu Przykładowe listy:?-hobby1=[muzyka,kuchnia], Hobby2=[narty,taniec], Lista=[tenis,Hobby1,film,Hobby2]. Hobby1=[muzyka,kuchnia], Hobby2=[narty,taniec], Lista=[tenis,[muzyka,kuchnia],film,[narty, taniec]]. Elementem składowym listy moŝe być inna lista.?- Pets =.(dogs,.(cats,[])). Pets = [dogs, cats] Funktor. moŝe być wykorzystywany jawnie przy tworzeniu list. 3

Reprezentacja list w Prologu Alternatywna notacja list W prologu listy mogą być zapisywane w sposób odzwierciedlający ich budowę: [Head Tail] gdzie: Head - moŝe być ciągiem dowolnych elementów (termów) oddzielonych przecinkiem, a Tail - dowolna listą elementów Przykład [a,b,c] = [a [b,c]] = [a,b [c]] = [a,b,c []] Operacja sprawdzania przynaleŝności elementu do listy Klauzula member(x,l) ma być prawdziwa, jeŝeli element X naleŝy do listy L. Przykładowo: member(b,[a,b,c]) - powinno być prawdziwe member(b,[a,[b,c]])- powinno być fałszywe, ale member([b,c],[a,[b,c]]) - powinno być prawdziwe Definicja X naleŝy do listy L, o ile X jest głową listy L lub X naleŝy do ogona listy L. Zapis w Prologu: member(x,[x Tail]). member(x,[head Tail]):- member(x,tail). 4

Operacja łączenia (konkatenacji) list Klauzula conc(l1,l2,l3) łączy listę L1 z listą L2 w listę wynikową L3. Przykłady conc([a,b],[c,d],[a,b,c,d]) - jest prawdziwe conc([a,b],[c,d],[a,b,a,c,d])- jest fałszywe Definicja JeŜeli lista L1 jest pusta, to lista L3 jest taka sama jak lista L2. JeŜeli lista L1 jest niepusta i ma postać [H T1], to lista L3 ma postać [H T2], gdzie T2 jest połączeniem list T1 i L2. Operacja łączenia (konkatenacji) list c.d. Zapis konkatenacji w Prologu: conc([],l,l). conc([h T1],L2,[H T2]):- conc(t1,l2,t2). H H L1 T1 T1 T2 [H T2] L2 L2 5

Operacja łączenia (konkatenacji) list c.d Zastosowanie operacji konkatenacji - dekompozycja listy:?- conc(l1,l2,[a,b,c]). L1=[] L2=[a,b,c]; L1=[a] L2=[b,c]; L1=[a,b] L2=[c]; L1=[a,b,c] L2=[]; No Operacja łączenia (konkatenacji) list c.d. Zastosowanie operacji konkatenacji - szukanie podlist:?- conc(przed,[sr Po], [pon,wt,sr,czw,pt,sob,nd]). Przed=[pon,wt] Po=[czw,pt,sob,nd] Zastosowanie operacji konkatenacji - szukanie poprzednika i następnika:?- conc(_,[przed,sr,po _], [pon,wt,sr,czw,pt,sob,nd]). Przed=wt Po=czw 6

Operacja łączenia (konkatenacji) list c.d. Zastosowanie operacji konkatenacji - usuwanie podlisty:?- L1=[a,b,z,z,c,z,z,z,d,e], conc(l2,[z,z,z _],L1). L1=[a,b,z,z,c,z,z,z,d,e] L2=[a,b,z,z,c] Zastosowanie operacji konkatenacji - inna wersjamember: member(x,l):- conc(l1,[x L2],L). albo: member(x,l):- conc(_,[x _],L). Zastosowanie operacji konkatenacji - inna wersja member : member(b,[a,b,c]) conc(l1,[b L2],[a,b,c]) 1-sza klauzula conc 2-ga klauzula conc Uzgadnianie: Uzgadnianie: L1=[] L1=[X L1 ] [b L2]=[a,b,c] [b L2]=L2 [a,b,c]=[x L3 ] poraŝka, bo b a daje: X=a,L3 =[b,c] No conc(l1,[b L2],[b,c]) 1-sza klauzula conc Uzgadnianie: L1 =[] [b L2]=[b,c] Yes daje: L2=[c] 7

Operacja dodawania elementu do listy Najprostszy wariant - dodać element na początku listy (nowa głowa listy). Zapis w Prologu: add(x,l,[x L]). Definiowanie tego predykatu nie jest konieczne, gdyŝ zawsze moŝna otrzymać nową listę Y, powiększając daną listę L o nowy element X, dzięki jawnemu uzgadnianiu termów: Y=[X L] Operacja usuwania elementu z listy Klauzula del(x,l,l1) ma być prawdziwa, jeŝeli lista L1 jest równa liście L pomniejszonej o element X. PołoŜenie elementu X jest dowolne. Definicja JeŜeli X jest głową listy L, to lista L1 jest ogonem listy L. JeŜeli X naleŝy do ogona listy L, to usuń stamtąd X. Zapis w Prologu: del(x,[x Tail],Tail). del(x,[h Tail],[H Tail1]):- del(x,tail,tail1). 8

Operacja usuwania elementu z listy c.d. Operacja del(x,l,l1) usuwa dowolne, ale tylko jedno (a nie wszystkie!) wystąpienie X z listy L. Działanie takie określamy mianem niedeterminizmu predykatu. Przykład?- del(a,[a,b,a,a],l). L=[b,a,a]; L=[a,b,a]; L=[a,b,a]; No Inna niedeterministyczna klauzula: member(x,l). Operacja usuwania elementu z listy c.d. Zastosowanie operacji del(x,l,l1) - wstawianie elementu do listy:?- 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]; No Zatem definicja w Prologu: insert(x,l,biggerl):- del(x,biggerl,l). 9

Operacje na podlistach Klauzula sublist(s,l) jest prawdziwa, jeśli lista S zawiera się w liście L. Przykłady sublist([c,d,e],[a,b,c,d,e,f]) - jest prawdziwe sublist([c,e],[a,b,c,d,e,f])- jest fałszywe Operacje na podlistach c.d. Analogia między klauzulą member(x,l) (w wersji z conc) a klauzulą sublist(s,l) L1 L1 L L S X L2 L2 [X L2] L3 member(x,l) sublist(s,l) 10

Operacje na podlistach c.d. Definicja Lista S naleŝy do listy L, o ile lista L składa się z dwóch list L1 i L2, a lista L2 jest połączeniem list S i L3. Zapis w Prologu sublist(s,l):- conc(l1,l2,l),conc(s,l3,l2). Przykład?- sublist(s,[a,b,c]). S=[]; S=[a]; S=[a,b]; S=[a,b,c]; S=[b];... 11