Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.4 Elementy języka Prolog: metaprogramowanie i struktury danych. Przemysław Kobylański
|
|
- Maciej Ostrowski
- 8 lat temu
- Przeglądów:
Transkrypt
1 Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.4 Elementy języka Prolog: metaprogramowanie i struktury danych Przemysław Kobylański Część I Wprowadzenie 1 Metapredykaty Argumentem wywołania predykatu może być warunek do sprawdzenia. Na wcześniejszych listach zadań korzystaliśmy między innymi z predykatu \+ Warunek, który jest metapredykatem wyrażającym negację. 1.1 Przykład Predykat forall/2 jest metapredykatem. Jego argumentami są dwa warunki: generator warunek dostarczający kolejne wartości, walidator warunek sprawdzający wygenerowane wartości. Predykat forall(generator, Walidator) jest spełniony gdy wszystkie wartości wygenerowane przez Generator spełniają warunek Walidator. Krótki dialog:?- forall(member(x, [2, 4, 6, 8]), 0 =:= X mod 2). true.?- forall(member(x, [2, 4, 5, 8]), 0 =:= X mod 2). 2 Kolekcjonowanie wyników Kolejne wyniki (odpowiedzi na zadane pytanie) można oglądać naciskając średnik po wydrukowaniu przez system Prolog każdego z nich. Jeśli odpowiedzi jest wiele, można stosując drukowanie i nawroty wyświetlić je wszystkie bez potrzeby żmudnego naciskania średnika:?- append(x, Y, [1, 2, 3, 4, 5]), write(x - Y), nl, fail. []-[1,2,3,4,5] [1]-[2,3,4,5] [1,2]-[3,4,5] 1
2 [1,2,3]-[4,5] [1,2,3,4]-[5] [1,2,3,4,5]-[] Często istnieje jednak konieczność zebrania wszystkich wyników na liście celem ich dalszego przetwarzania, a nie tylko wydrukowania ich na ekranie. Niech T będzie termem zawierającym zmienne a G warunkiem generującym wartości dla tych zmiennych. Predykat findall(t, G, L) tworzy listę wszystkich przykładów termu T powstałych przez podstawianie za zmienne z termu T wartości wygenerowanych warunkiem G. Na liście L mogą pojawić się wielokrotnie te same termy. Jeśli chcemy kolekcjonować termy bez powtórzeń (utworzyć ich zbiór a nie listę), należy użyć predykatu setof(t, G, L). Lista utworzona przez predykat setof/3 nie tylko nie zawiera powtórzeń ale również jest uporządkowana zgodnie z liniowym porządkiem na Przy predykacie setof/3 trzeba uważać na zmienne, które występują w warunku G ale nie występują w termie T. Aby faktycznie zebrać wszystkie przykłady termu należy zastosować kwantyfikator egzystencjalny. Zapis X^G, gdzie X jest zmienną występującą w warunku G ale nie w termie T, należy rozumieć jako ( X)G. Warunek findall/3 odpowiada warunkowi bagof/3, przy czym zachodzą następujące dwie różnice: 1. Jeśli lista przykładów jest pusta, to findall/3 nie zawodzi, natomiast bagof/3 zawodzi. 2. bagof/3 umożliwia korzystania z kwantyfikatora egzystencjalnego a findall/3 nie pozwala na to. Więcej o znajdowaniu wszystkich rozwiązań w rozdziale podręcznika: Finding all Solutions to a Goal. 2.1 Przykłady p(b). p(a). p(b). p(a).?- findall(x, p(x), L). L = [b, a, b, a].?- setof(x, p(x), L). L = [a, b].?- findall(k, (between(-2, 2, I), K is I*I), L). L = [4, 1, 0, 1, 4].?- setof(k, (between(-2, 2, I), K is I*I), L). I = -2, L = [4] ; I = -1, L = [1] ; I = 0, 2
3 L = [0] ; I = 1, L = [1] ; I = 2, L = [4].?- setof(k, I^(between(-2, 2, I), K is I*I), L). L = [0, 1, 4].?- findall(x, (member(x, [1, 2, 3]), X > 4), L). L = [].?- bagof(x, (member(x, [1, 2, 3]), X > 4), L).?- bagof(x, (member(x, [1, 2, 3]), X > 2), L). L = [3]. 3 Metaprogramowanie Wykorzystywanie metapredykatów bardzo upraszcza zapis programów gdyż dostarcza ogromną moc języka. Możliwe jest w nim budowanie termu, który stanie się warunkiem do udowodnienia:?- Warunek =.. [append, X, Y, [1, 2, 3]], Warunek. Warunek = append([], [1, 2, 3], [1, 2, 3]), X = [], Y = [1, 2, 3] ; Warunek = append([1], [2, 3], [1, 2, 3]), X = [1], Y = [2, 3] ; Warunek = append([1, 2], [3], [1, 2, 3]), X = [1, 2], Y = [3] ; Warunek = append([1, 2, 3], [], [1, 2, 3]), X = [1, 2, 3], Y = [] ; W powyższym przykładzie użyto predykat =../2, który służy do konstruowania i rozkładania termów na listę złożoną z funktora i jego argumentów:?- a =.. X. X = [a].?- f(a) =.. X. X = [f, a].?- f(a, g(b)) =.. X. X = [f, a, g(b)].?- X =.. [f, a, g(b), c]. X = f(a, g(b), c). 3
4 3.1 Przykłady Łamigłówka Każdy mieszkaniec wyspy jest albo rycerzem (zawsze mówi prawdę) albo łotrem (zawsze kłamie). Pewnego dnia B stwierdził: "A powiedział o sobie, że jest łotrem". Kim jest B? rycerz(rycerz). lotr(lotr). powiedzial(rycerz, X) :- X. powiedzial(lotr, X) :- \+ X.?- powiedzial(b, powiedzial(a, lotr(a))). B = lotr Interpreter Prologu w Prologu Predykat clause/2 umożliwia pobieranie klauzul składających się na program w Prologu. Warunek clause(head, Body) jest spełniony gdy dla danej formuły atomowej Head istnieje klauzula o głowie unifikowalnej z Head i ciele (treści) unifikowalneym z Body. W wyniku nawrotów podstawiane będą kolejne klauzule o głowach pasujących do Head. app([], X, X). app([x Y1], Y2, [X Z]) :- app(y1, Y2, Z). interpreter(true). interpreter((g1, G2)) :- interpreter(g1), interpreter(g2). interpreter(a) :- A \= true, A \= (_, _), clause(a, B), interpreter(b). [debug]?- interpreter(app(x, Y, [1, 2, 3])). X = [], Y = [1, 2, 3] ; X = [1], Y = [2, 3] ; X = [1, 2], Y = [3] ; X = [1, 2, 3], Y = [] ; Powyższy interpreter obsługuje tylko predykaty zdefiniowane klauzulami, których ciała są warunkiem true (gdy fakt) albo jedną lub koniunkcją formuł atomowych połączonych przecinkami (gdy reguła). 4
5 4 Struktury danych W Prologu dostępne są moduły definiujące między innymi następujące struktury danych: zbiory uporządkowane kopce (kolejki priorytetowe) drzewa czerwono-czarne 4.1 Zbiory uporządkowane Zbiory można reprezentować w Prologu w postaci list uporządkowanych bez powtarzających się elementów. Aby skorzystać z dostępnych w Prologu predykatów na zbiorach uporządkowanych, należy zaimportować moduł ordsets w pliku źródłowym dyrektywą: :- use_module(library(ordsets)). albo zadając systemowi sc Prolog pytanie:?- use_module(library(ordsets)). Przykład dialogu o zbiorach uporządkowanych:?- list_to_ord_set([1, 2, 3, 2, 3, 4], X), ord_memberchk(2, X). X = [1, 2, 3, 4].?- list_to_ord_set([1, 2, 3, 2, 3, 4], X), ord_memberchk(5, X).?- list_to_ord_set([1, 2, 1], X1), list_to_ord_set([2, 1, 3], X2), ord_intersection(x1, X2, X). X1 = X, X = [1, 2], X2 = [1, 2, 3].?- list_to_ord_set([1, 2, 1], X1), list_to_ord_set([2, 1, 3], X2), ord_union(x1, X2, X). X1 = [1, 2], X2 = X, X = [1, 2, 3].?- list_to_ord_set([1, 2, 1], X1), list_to_ord_set([2, 1, 3], X2), ord_symdiff(x1, X2, X). X1 = [1, 2], X2 = [1, 2, 3], X = [3]. Więcej o zbiorach uporządkowanych w dodatku podręcznika: library(ordsets): Ordered set manipulationl. 4.2 Drzewa czerwono-czarne Aby skorzystać z dostępnych w Prologu predykatów na drzewach czerwono-czarnych, należy zaimportować moduł rbtrees w pliku źródłowym dyrektywą: :- use_module(library(rbtrees)). 5
6 albo zadając systemowi sc Prolog pytanie:?- use_module(library(rbtrees)). Elementy wstawiane są do drzewa czerwono-czarnego wraz z kluczami względem których drzewo jest uporządkowane. Najprościej stworzyć drzewo czerwono-czarne tak jak w poniższym przykładzie, tj. przez zamianę listy zawierającej pary Klucz - Element:?- list_to_rbtree([2-a, 0-b, 5-c, 1-d], RB0), rb_del_min(rb0, MinKlucz, MinElement, RB1), rb_del_max(rb1, MaxKlucz, MaxElement, RB2). RB0 = t(black(, _G1908, _G1909, ), black(black(black(, _G1908, _G1909, ), 0, b, black(, _G1908, _G1909, )), 1, d, black(black(, _G1908, _G1909, ), 2, a, red(black(, _G1908, _G1909, ), 5, c, black(, _G1908, _G1909, ))))), MinKlucz = 0, MinElement = b, RB1 = t(black(, _G1908, _G1909, ), black(black(black(, _G1908, _G1909, ), 1, d, black(, _G1908, _G1909, )), 2, a, black(black(, _G1908, _G1909, ), 5, c, black(, _G1908, _G1909, )))), MaxKlucz = 5, MaxElement = c, RB2 = t(black(, _G1908, _G1909, ), black(red(black(, _G1908, _G1909, ), 1, d, black(, _G1908, _G1909, )), 2, a, black(, _G1908, _G1909, ))). W powyższym przykładzie: RB0 jest drzewem czerwono-czarnym zawierającym pary 2-a, 0-b, 5-c, 1-d, RB1 jest drzewem czerwono-czarnym powstałym z RB0 przez usunięcie elementu o najmniejszym kluczu, RB2 jest drzewem czerwono-czarnym powstałym z RB1 przez usunięcie elementu o największym kluczu. Więcej o drzewach czerwono-czarnych w opisie biblioteki: rbtrees.pl Red black trees. 4.3 Kopce/kolejki priorytetowe Celem szybkiego dostępu do minimalnego elementu i usuwania go ze zbioru, można użyć strukturę kopca (kolejki priorytetowej). Aby skorzystać z dostępnych w Prologu predykatów na kopcach (kolejkach priorytetowych), należy zaimportować moduł heaps w pliku źródłowym dyrektywą: :- use_module(library(heaps)). albo zadając systemowi sc Prolog pytanie:?- use_module(library(heaps)). Elementy (klucze) w kopcu (kolejce priorytetowej) przechowywane są w postaci par Priorytet - Klucz, gdzie Priorytet jest wartością względem której Klucz jest uporządkowany w kopcu (kolejce priorytetowej). W poniższym przykładzie wstawiono trzy klucze e1, e2, e3 o priorytetach, odpowiednio, 20, 10, 30 a następnie usunięto z utworzonego kopca (kolejki priorytetowej) Klucz o najmniejszym priorytecie: 6
7 ?- list_to_heap([], H0), add_to_heap(h0, 20, e1, H1), add_to_heap(h1, 10, e2, H2), add_to_heap(h2, 30, e3, H3), get_from_heap(h3, Priorytet, Klucz, H4). H0 = heap(nil, 0), H1 = heap(t(e1, 20, []), 1), H2 = heap(t(e2, 10, [t(e1, 20, [])]), 2), H3 = heap(t(e2, 10, [t(e3, 30, []), t(e1, 20, [])]), 3), Priorytet = 10, Klucz = e2, H4 = heap(t(e1, 20, [t(e3, 30, [])]), 2). W powyższym przykładzie: H0 jest początkowo pustym kopcem, H1 jest kopcem zawierającym jedynie klucz e1, H2 jest kopcem zawierającym klucze e1 i e2, H3 jest kopcem zawierającym klucze e1, e2 i e3, H4 jest kopcem powstałym z H3 po usunięciu klucza o najmniejszym priorytecie. Więcej o kopcach/kolejkach priorytetowych w opisie biblioteki: heaps.pl heaps/priorit queues. Część II Zadania i polecenia Polecenie 1 Załóżmy, że dana jest baza o zarobkach pracowników w postaci następujących faktów: pracownik(abacki, 3700). pracownik(babacki, 5200). pracownik(cabacki, 2500). Skompiluj powyższe fakty (np. umieszczając je w pliku baza.pl i kompilując ją). Jeśli chcemy poznać nazwiska pracowników w kolejności rosnących zarobków, możemy zrobić to następującym pytaniem:?- setof(zarobek - Pracownik, pracownik(pracownik, Zarobek), Zbior), member(_ - Nazwisko, Zbior). Zbior = [2500-cabacki, 3700-abacki, 5200-babacki], Nazwisko = cabacki ; Zbior = [2500-cabacki, 3700-abacki, 5200-babacki], Nazwisko = abacki ; Zbior = [2500-cabacki, 3700-abacki, 5200-babacki], Nazwisko = babacki. 7
8 W powyższym przykładzie lista Zbior jest uporządkowaną listą par Zarobek - Pracownik. Pary takie uporządkowane są według następującego porządku liniowego: Z 1 P 1 < Z 2 P 2 (Z 1 < Z 2 ) jest liniowym porządkiem na termach. Zadanie 2 Elementy macierzy: A = zapisano w postaci faktów tab(i, j, a ij ): (Z 1 = Z 2 P 2 ), tab(1, 1, 5). tab(1, 2, 3). tab(1, 3, 4). tab(1, 4, 3). tab(2, 1, 7). tab(2, 2, 2). tab(2, 3, 0). tab(2, 4, -2). tab(3, 1, 10). tab(3, 2, -1). tab(3, 3, -4). tab(3, 4, 2). Niech warunek siodlo(i, J) wyraża, to że element a ij tak zadanej macierzy jest punktem siodłowym, tj. zachodzi: Napisz predykat siodlo(i, J). ( k )( l ) a kj a ij a il 1. Czy potrafisz tak napisać predykat siodlo(i, J) aby znajdował wszystkie punkty siodłowe przykładowej macierzy A w mniej niż 100 wnioskowań (użyj predykat time/1 do pomiaru). 2. Wskazówka: użyj negację. Przykład pomiaru liczby wnioskowań przy wyznaczaniu wszystkich punktów siodłowych:?- time((siodlo(_, _), fail)). % 63 inferences, CPU in seconds (84% CPU, Lips) Zadanie 3 Załóżmy, że formuły iap(e1, N, E2) wyrażają fakt, że element E1 jest częścią (isa-part) elementu E2 i występuje w nim w N egzemplarzach (np. iap(kolo, 2, rower). Poniżej przedstawiono kilka faktów opisujących obiekt o1 złożony z obiektów o2, o3, o4, o5: iap(o2, 2, o1). iap(o3, 3, o1). iap(o4, 2, o3). iap(o5, 5, o3). Powyższe fakty można zrozumieć następująco: 1. Aby zmontować jedną sztukę o1 należy połączyć ze sobą dwie sztuki o2 i trzy sztuki o3. 8
9 2. Aby zmontować jedną sztukę o3 należy połączyć ze sobą dwie sztuki o4 i pięć sztuk o5. 3. Elementy o2, o4 i o5 nie są montowane zatem należy je zakupić. Napisz predykat zamowienie(produkt, N, Lista), który planuje wielkość zakupów na potrzeby wyprodukowania N egzemplarzy Produktu. Zamówienie powinno być w postaci listy o elementach postaci Liczba * Element, wyrażających potrzebę zamówienia danej liczby elementów. Przykładowy dialog:?- zamowienie(o1, 10, X). X = [20*o2, 60*o4, 150*o5].?- zamowienie(o3, 50, X). X = [100*o4, 250*o5]. 9
Programowanie w Logice
Programowanie w Logice Przeszukiwanie rozwiązań Przemysław Kobylański Generowanie wszystkich rozwiązań Prolog nie tylko potrafi sprawdzić czy dana spełnia warunek ale również potrafi wygenerować wszystkie
Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.2 Elementy języka Prolog: reguły i rekurencja. Przemysław Kobylański
Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.2 Elementy języka Prolog: reguły i rekurencja Przemysław Kobylański Część I Wprowadzenie 1 Reguły Przypomnijmy z poprzedniej listy zadań fakty
Programowanie w Logice Struktury danych (Lista 2)
Programowanie w Logice Struktury danych (Lista 2) Przemysław Kobylański Wstęp Struktury danych wyraża się w Prologu w postaci termów, tj. symbolicznych wyrażeń. Dotychczas poznaliśmy proste termy takie
Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.1 Elementy języka Prolog: fakty i zapytania. Przemysław Kobylański
Wprowadzenie do Sztucznej Inteligencji Laboratorium lista 0.1 Elementy języka Prolog: fakty i zapytania Przemysław Kobylański Część I Wprowadzenie 1 Stałe i zmienne Jedynym dostępnym w języku Prolog rodzajem
Programowanie w Logice Przykłady programów. Przemysław Kobylański
Programowanie w Logice Przykłady programów Przemysław Kobylański Język Imperator 1 jest prostym językiem imperatywnym. Jego składnię opisuje poniższa gramatyka BNF: PROGRAM ::= PROGRAM ::= INSTRUKCJA ;
PODSTAWY SZTUCZNEJ INTELIGENCJI
Katedra Informatyki Stosowanej Politechnika Łódzka PODSTAWY SZTUCZNEJ INTELIGENCJI Laboratorium PROGRAMOWANIE SYSTEMÓW EKSPERTOWYCH Opracowanie: Dr hab. inŝ. Jacek Kucharski Dr inŝ. Piotr Urbanek Cel ćwiczenia
PROLOG INNE PRZYKŁADY MACIEJ KELM
PROLOG INNE PRZYKŁADY MACIEJ KELM PREDYKAT RANDOM Funkcja random zwraca losową liczbę całkowitą w przedziale od 1 do X. Gdzie X jest parametrem funkcji random. Przed użyciem random należy zainicjować tak
Programowanie w Logice Gramatyki metamorficzne. Przemysław Kobylański na podstawie [CM2003] i [SS1994]
Programowanie w Logice Gramatyki metamorficzne Przemysław Kobylański na podstawie [CM2003] i [SS1994] Gramatyki bezkontekstowe Gramatyką bezkontekstową jest uporządkowana czwórka G = Σ, N, S, P, gdzie
Programowanie w Logice Środowisko programowania i dialog z systemem (Lista 0)
Programowanie w Logice Środowisko programowania i dialog z systemem (Lista 0) Przemysław Kobylański Wstęp Podczas laboratorium będziemy korzystać z systemu SWI-Prolog. Należy go ściągnąć i zainstalować
Programowanie w logice
Programowanie w logice PROLOG cz.1 PROLOG język wysokiego poziomu Powstał w 1972 na Uniwersytecie w Marsylii (Francja) w zespole A.Colmerauer a i F.Roussel a PROgrammation en LOGique, PROgramming in LOGic,
Podstawy Sztucznej Inteligencji (PSZT)
Podstawy Sztucznej Inteligencji (PSZT) Paweł Wawrzyński Wnioskowanie logiczne i systemy eksperckie Systemy posługujące się logiką predykatów: część 2/3 Dzisiaj Literały i klauzule w logice predykatów Sprowadzania
Programowanie w Logice
Programowanie w Logice Wejście i wyjście Przemysław Kobylański na podstawie [CM2003] Term czyta się ze standardowego wejścia predykatem read/1. Każdy wczytywany term powinien być zakończony kropką. Predykat
Metoda Tablic Semantycznych
Procedura Plan Reguły Algorytm Logika obliczeniowa Instytut Informatyki Plan Procedura Reguły 1 Procedura decyzyjna Logiczna równoważność formuł Logiczna konsekwencja Procedura decyzyjna 2 Reguły α, β,
Programowanie w logice Prolog 2
Programowanie w logice Prolog 2 Listy Lista to uporządkowany ciąg elementów. Elementami listy mogą być dowolne terminy: stałe, zmienne i struktury W Prologu listę zapisujemy następująco: Przykłady [element1,element2,,elementn]
PROLOG. Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd.
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,
Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka)
Prolog 2 (Filip Wroński, Łukasz Betkowski, Paweł Świerblewski, Konrad Kosmatka) Rozdział 2 Constructing Prolog Programs z książki Prolog Programming in Depth autorstwa Michael A. Covington, Donald Nute,
Dana jest baza: kobieta(katarzyna). kobieta(anna). kobieta(maria). kobieta(marianna). kobieta(marta). Zdefiniujemy predykat kobiety/0 następująco:
STEROWANIE PROCESEM WNIOSKOWANIA. Predykat true/0 fail/0 cut/0 lub! not( W) lub \+W repeat/0 Objaśnienie zawsze spełniony, deterministyczny zawsze zawodzi, deterministyczny odcięcie; zawsze spełniony spełniony,
Programowanie w Logice
Programowanie w Logice Działanie Prologu Przemysław Kobylański na podstawie [CM2003] Składnia Programy Prologu składają się z termów. Term to stała, zmienna lub struktura (term złożony). Term zapisuje
I. Podstawowe pojęcia i oznaczenia logiczne i mnogościowe. Elementy teorii liczb rzeczywistych.
I. Podstawowe pojęcia i oznaczenia logiczne i mnogościowe. Elementy teorii liczb rzeczywistych. 1. Elementy logiki matematycznej. 1.1. Rachunek zdań. Definicja 1.1. Zdaniem logicznym nazywamy zdanie gramatyczne
Projekt 4: Programowanie w logice
Języki Programowania Projekt 4: Programowanie w logice Środowisko ECL i PS e W projekcie wykorzystane będzie środowisko ECL i PS e. Dostępne jest ono pod adresem http://eclipseclp.org/. Po zainstalowaniu
JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.
IŚ ćw.8 JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript są zagnieżdżane w dokumentach HTML. Skrypt JavaScript
Programowanie w logice
Programowanie w logice PROLOG cz.3 Predykat sprawdzający, czy podana lista stanowi początek innej listy: poczatek([],[_ _]). poczatek([h1 T1], [H2 T2]) :- H1 = H2, poczatek(t1,t2). ------------------------------------------------------------------------
Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykłady 12 i 13. Dowód i dowodzenie w KRP. Tezy KRP
Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykłady 12 i 13. Dowód i dowodzenie w KRP. Tezy KRP 1 Pojęcie dowodu w KRP Pojęcia: formuły zdaniowej języka Klasycznego Rachunku
Wprowadzenie do Prologa
Wprowadzenie do Prologa Rozdział 1 Tutorial Introduction Maciej Gapiński Dominika Wałęga Spis treści 1. Podstawowe informacje 2. Obiekty i relacje 3. Reguły 4. Fakty 5. Zapytania 6. Zmienne i stałe Podstawowe
Język C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
Algorytmy i Struktury Danych, 9. ćwiczenia
Algorytmy i Struktury Danych, 9. ćwiczenia 206-2-09 Plan zajęć usuwanie z B-drzew join i split na 2-3-4 drzewach drzepce adresowanie otwarte w haszowaniu z analizą 2 B-drzewa definicja każdy węzeł ma następujące
Podstawy Sztucznej Inteligencji (PSZT)
Podstawy Sztucznej Inteligencji (PSZT) Paweł Wawrzyński Wnioskowanie logiczne i systemy eksperckie Systemy posługujące się logiką predykatów: część 3/3 Dzisiaj Uogólnienie Poprawność i pełność wnioskowania
Laboratorium przedmiotu Paradygmaty Programowania
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
Składnia rachunku predykatów pierwszego rzędu
Początek Gramatyka Kwantyfikatory Poprawność Logika obliczeniowa Instytut Informatyki Początek Gramatyka Kwantyfikatory Poprawność Plan wykładu 1 Na (dobry) początek Zrozumieć słowa Oswoić znaki 2 Gramatyka
Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania
Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania Przemysław Kobylański Wprowadzenie Każdy program w C musi zawierać przynajmniej funkcję o nazwie main(): Aby możliwe
Klasyczny rachunek predykatów
Kultura logiczna Klasyczny rachunek predykatów Bartosz Gostkowski bgostkowski@gmail.com Alfabet klasycznego rachunku zdań reguły konsytutywne języka Alfabet klasycznego rachunku predykatów (KRP Do alfabetu
Struktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Listy, krotki, słowniki, funkcje
Listy, krotki, słowniki, funkcje Listy Lista jest najbardziej elastycznym typem obiektu uporządkowanej kolekcji. Może zawierać różne typy danych - liczby, łańcuchy znaków, a nawet inne listy. Tworzy się
Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.
Spis treści 1 Drzewa 1.1 Drzewa binarne 1.1.1 Zadanie 1.1.2 Drzewo BST (Binary Search Tree) 1.1.2.1 Zadanie 1 1.1.2.2 Zadanie 2 1.1.2.3 Zadanie 3 1.1.2.4 Usuwanie węzła w drzewie BST 1.1.2.5 Zadanie 4
Adam Meissner.
Instytut Automatyki i Inżynierii Informatycznej Politechniki Poznańskiej Adam Meissner Adam.Meissner@put.poznan.pl http://www.man.poznan.pl/~ameis SZTUCZNA INTELIGENCJA Podstawy logiki pierwszego rzędu
Wstęp do programowania
Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25 Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie
Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie
Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których
Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski
Systemy ekspertowe i ich zastosowania Katarzyna Karp Marek Grabowski Plan prezentacji Wstęp Własności systemów ekspertowych Rodzaje baz wiedzy Metody reprezentacji wiedzy Metody wnioskowania Języki do
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań.
Paradygmaty Programowania Język Prolog Celem ćwiczenia jest zapoznanie się z podstawowymi możliwościami języka Prolog w zakresie definiowania faktów i reguł oraz wykonywania zapytań. Wstęp Prolog (od francuskiego
Porządek symetryczny: right(x)
Porządek symetryczny: x lef t(x) right(x) Własność drzewa BST: W drzewach BST mamy porządek symetryczny. Dla każdego węzła x spełniony jest warunek: jeżeli węzeł y leży w lewym poddrzewie x, to key(y)
Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303
Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp
Adam Meissner STUCZNA INTELIGENCJA
Instytut Automatyki i Inżynierii Informatycznej Politechniki Poznańskiej Adam Meissner Adam.Meissner@put.poznan.pl http://www.man.poznan.pl/~ameis STUCZNA INTELIGENCJA Elementy programowania w logice Literatura
Programowanie deklaratywne
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
EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew
1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;
Algorytmy sortujące i wyszukujące
Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.
1. Składnia. Logika obliczeniowa - zadania 1 SKŁADNIA Teoria
Logika obliczeniowa - zadania 1 SKŁADNIA 1. Składnia 1.1. Teoria 1. Składnia oznacza reguły tworzenia... z.... 2. Rachunek predykatów pierwszego rzędu (w skrócie: rachunek predykatów) wyróżnia cztery zbiory
Programowanie logiczne a negacja
Programowanie logiczne a negacja Adrian Woźniak 12 stycznia 2006r. SPIS TREŚCI Programowanie logiczne a negacja Spis treści 1 Wstęp 2 2 Wnioskowanie negatywnych informacji 2 2.1 Reguła CWA (Closed World
Programowanie deklaratywne
Języki i paradygmaty programowania Lista (elementy języka Oz) Przemysław Kobylański Zaprogramuj w języku Oz rozwiązania poniższych zadań. Na ocenę dostateczną trzeba rozwiązać wszystkie zadania bez gwiazdek.
Programowanie deklaratywne
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
Elementy języka Prolog
Elementy języka Prolog Cechy języka Podstawy Zamrażanie celów (korutyny) Programowanie ograniczeń Cechy języka Deklaratywne programowanie w logice Formuły rachunku predykatów Rezolucja liniowa Atrybuty
Semantyka rachunku predykatów
Relacje Interpretacja Wartość Spełnialność Logika obliczeniowa Instytut Informatyki Relacje Interpretacja Wartość Plan Plan Relacje O co chodzi? Znaczenie w logice Relacje 3 Interpretacja i wartościowanie
Wstęp do logiki. Klasyczny Rachunek Predykatów I
Wstęp do logiki Klasyczny Rachunek Predykatów I KRZ jest teorią stanowiącą wstępną część logiki formalnej, część zakładaną przez inne teorie. Przypomnijmy, jest on teorią związków logicznych między zdaniami
REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał
REKURENCJA W JĘZYKU HASKELL Autor: Walczak Michał CZYM JEST REKURENCJA? Rekurencja zwana rekursją, polega na wywołaniu przez funkcję samej siebie. Algorytmy rekurencyjne zastępują w pewnym sensie iteracje.
1. Wstęp do logiki. Matematyka jest nauką dedukcyjną. Nowe pojęcia definiujemy za pomocą pojęć pierwotnych lub pojęć uprzednio wprowadzonych.
Elementy logiki i teorii zbiorów. 1. Wstęp do logiki. Matematyka jest nauką dedukcyjną. Nowe pojęcia definiujemy za pomocą pojęć pierwotnych lub pojęć uprzednio wprowadzonych. Pojęcia pierwotne to najprostsze
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 Prolog Programowanie w Prologu składa się z: 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. Zadawania zapytao o
Wykład 11b. System aksjomatyczny Klasycznego Rachunku Predykatów. Aksjomaty i reguły inferencyjne
Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykład 11b. System aksjomatyczny Klasycznego Rachunku Predykatów. Aksjomaty i reguły inferencyjne Istnieje wiele systemów aksjomatycznych
Wprowadzenie do logiki Zdania, cz. III Język Klasycznego Rachunku Predykatów
Wprowadzenie do logiki Zdania, cz. III Język Klasycznego Rachunku Predykatów Mariusz Urbański Instytut Psychologii UAM Mariusz.Urbanski@amu.edu.pl Plan na pytanie o odniesienie przedmiotowe zdań odpowiedź
Programowanie deklaratywne
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
Cw.12 JAVAScript w dokumentach HTML
Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane
Programowanie w logice Wykład z baz danych dla
Programowanie w logice Wykład z baz danych dla studentów matematyki 18 maja 2015 Programowanie w logice Programowanie w logice to podejście do programowania, w którym na program patrzymy nie jak na opis
Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013
Adam Meissner SZTUCZNA INTELIGENCJA
Instytut Automatyki i Inżynierii Informatycznej Politechniki Poznańskiej Adam Meissner Adam.Meissner@put.poznan.pl http://www.man.poznan.pl/~ameis SZTUCZNA INTELIGENCJA Elementy wnioskowania automatycznego
Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:
Sortowanie Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania: podać strukturę danych dla elementów dynamicznego skończonego multi-zbioru S, względem którego są wykonywane następujące
Problem. Uzgadnianie wyrażeń rachunku predykatów. Instancja wyrażenia. Podstawienie termu za zmienną. Joanna Józefowska
Problem Instytut Informatyki jedzenie(x 1 ) lubi(adam, x 1 ) jedzenie(jabłko) jedzenie(kurczak) je(x 1, x 2 ) żyje(x 1 ) jedzenie(x 2 ) je(bogdan, orzeszki) żyje(bogdan) je(bogdan, x 2 ) je(zuzia, x 2
mgr inż. Adam Pinkowski
mgr inż. Adam Pinkowski Tel. 058 661 78 50 tel. kom. (0) 502 180 637 Adres domowy: 81-342 Gdynia, ul. Waszyngtona 18/23 e-mail: pinkowski@geoprogram.eu INSTRUKCJA UŻYTKOWANIA PROGRAMU PROFILGEO (v.7.1.235)
METODA SYMPLEKS. Maciej Patan. Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski
METODA SYMPLEKS Maciej Patan Uniwersytet Zielonogórski WSTĘP Algorytm Sympleks najpotężniejsza metoda rozwiązywania programów liniowych Metoda generuje ciąg dopuszczalnych rozwiązań x k w taki sposób,
Uzgadnianie formuł rachunku predykatów
Składanie podstawień Plan wykładu Uzgadnianie Logika obliczeniowa Instytut Informatyki Plan wykładu Składanie podstawień 1 Składanie podstawień Podstawienie Motywacja Złożenie podstawień 2 Uzgadnianie
Informatyka klasa III Gimnazjum wymagania na poszczególne oceny
Informatyka klasa III Gimnazjum wymagania na poszczególne oceny Algorytmika i programowanie Rozwiązywanie problemów i podejmowanie decyzji z wykorzystaniem komputera, stosowanie podejścia algorytmicznego
Zadanie projektowe nr 1
Zadanie projektowe nr 1 Badanie efektywności operacji dodawania (wstawiania), usuwania oraz wyszukiwania elementów w podstawowych strukturach danych Należy zaimplementować oraz dokonać pomiaru czasu działania
Języki programowania deklaratywnego
Katedra Inżynierii Wiedzy laborki 14 Języki deklaratywne Główne różnice między paradygmatem deklaratywnym a imperatywnym Omów główne cechy paradygmatu programowania w logice na przykładzie Prologa Główne
Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu.
Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykład 11a. Składnia języka Klasycznego Rachunku Predykatów. Języki pierwszego rzędu. 1 Logika Klasyczna obejmuje dwie teorie:
Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.
Plan Procedura decyzyjna Reguły α i β - algorytm Plan Procedura decyzyjna Reguły α i β - algorytm Logika obliczeniowa Instytut Informatyki 1 Procedura decyzyjna Logiczna konsekwencja Teoria aksjomatyzowalna
Wykład 2. Relacyjny model danych
Wykład 2 Relacyjny model danych Wymagania stawiane modelowi danych Unikanie nadmiarowości danych (redundancji) jedna informacja powinna być wpisana do bazy danych tylko jeden raz Problem powtarzających
Algorytmy i struktury danych
Algorytmy i struktury danych Proste algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Pojęcie sortowania Sortowaniem nazywa się proces ustawiania zbioru obiektów w określonym porządku Sortowanie
Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:
Struktura danych Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych: rekord tablica lista stos kolejka drzewo i jego odmiany (np. drzewo
Optymalizacja systemów
Optymalizacja systemów Laboratorium Zadanie nr 3 Sudoku autor: A. Gonczarek Cel zadania Celem zadania jest napisanie programu rozwiązującego Sudoku, formułując problem optymalizacji jako zadanie programowania
Zaawansowane aplikacje WWW - laboratorium
Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w
Podstawowe zapytania SELECT (na jednej tabeli)
Podstawowe zapytania SELECT (na jednej tabeli) Struktura polecenia SELECT SELECT opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje FROM nazwy tabel lub widoków WHERE warunek (wybieranie wierszy) GROUP
METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ
METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ KONWERSATORIUM 6: REZOLUCJA V rok kognitywistyki UAM 1 Kilka uwag terminologicznych Słuchacze zapewne pamiętają z zajęć dotyczących PROLOGu poniższą
Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9
Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Tabele 9 Klucze 10 Relacje 11 Podstawowe zasady projektowania tabel 16 Rozdział 2. Praca z tabelami 25 Typy danych 25 Tworzenie tabel 29 Atrybuty kolumn
TECHNOLOGIE INTERNETOWE WYKŁAD 6. JavaScript Funkcje i obiekty
1. Co to jest funkcja? Funkcja jest oddzielnym blokiem kodu, który może być wielokrotnie wykonywany w danym programie, poprzez jej wielokrotne wywoływanie. Do funkcji przekazujemy przeważnie jakieś argumenty,
Definicje wyższego poziomu
Definicje wyższego poziomu Interpreter Scheme-a nie będzie narzekad w przypadku wystąpienia niezdefionowanej zmiennej w ciele wyrażenia lambda dopóki nie będzie zastosowana Przykład braku informacji o
MS Excel 2007 Kurs zaawansowany Obsługa baz danych. prowadzi: Dr inż. Tomasz Bartuś. Kraków: 2008 04 25
MS Excel 2007 Kurs zaawansowany Obsługa baz danych prowadzi: Dr inż. Tomasz Bartuś Kraków: 2008 04 25 Bazy danych Microsoft Excel 2007 udostępnia szereg funkcji i mechanizmów obsługi baz danych (zwanych
Język rachunku predykatów Formuły rachunku predykatów Formuły spełnialne i prawdziwe Dowody założeniowe. 1 Zmienne x, y, z...
Język rachunku predykatów 1 Zmienne x, y, z... 2 Predykaty n-argumentowe P(x, y,...), Q(x, y...),... 3 Funktory zdaniowe,,,, 4 Kwantyfikatory: istnieje, dla każdego Język rachunku predykatów Ustalenie
Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279
Wykład 8 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 sformułowanie problemu przegląd drzewa poszukiwań przykłady problemów wybrane narzędzia programistyczne J. Cichoń, P. Kobylański
dodatkowe operacje dla kopca binarnego: typu min oraz typu max:
ASD - ćwiczenia IX Kopce binarne własność porządku kopca gdzie dla każdej trójki wierzchołków kopca (X, Y, Z) porządek etykiet elem jest następujący X.elem Y.elem oraz Z.elem Y.elem w przypadku kopca typu
Drzewo binarne BST. LABORKA Piotr Ciskowski
Drzewo binarne BST LABORKA Piotr Ciskowski zadanie 1. drzewo binarne - 1 Zaimplementuj drzewo binarne w postaci: klasy Osoba przechowującej prywatne zmienne: liczbę całkowitą to będzie klucz, wg którego
PRZYKŁADOWY TEST EGZAMINACYJNY
European Computer Competence Certificate PRZYKŁADOWY TEST EGZAMINACYJNY Europejskiego Certyfikatu Kompetencji Informatycznych ECCC Moduł: IT M3 Arkusze kalkulacyjne Poziom: B Średniozaawansowany FUNDACJA
Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ
Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ 1 Inferencyjna równoważność formuł Definicja 9.1. Formuła A jest
WYMAGANIA EDUKACYJNE Z INFORMATYKI dla klasy III gimnazjalnej, Szkoły Podstawowej w Rychtalu
WYMAGANIA EDUKACYJNE Z INFORMATYKI dla klasy III gimnazjalnej, Szkoły Podstawowej w Rychtalu 1 Algorytmika i programowanie Rozwiązywanie problemów i podejmowanie decyzji z wykorzystaniem komputera, stosowanie
Statyczne i dynamiczne predykaty
Statyczne i dynamiczne predykaty Dynamiczne dowodzą lub odwołują pewne reguły, Statyczne nie potrafią tego co dynamiczne, ponieważ ich punkty zostały zebrane w całość, która działa szybciej, ale nie jest
CLP Programowanie logiczne z ograniczeniami.
CLP Programowanie logiczne z ograniczeniami. Wstęp Programowanie z ograniczeniami (Constraint Programming CP) stało się w ostatnich latach popularnym sposobem modelowania i rozwiązywania wielu problemów
Optymalizacja systemów
Optymalizacja systemów Laboratorium Sudoku autor: A. Gonczarek Cel zadania Celem zadania jest napisanie programu rozwiązującego Sudoku, formułując problem optymalizacji jako zadanie programowania binarnego.
Programowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
Podstawy języka PROLOG
Dariusz Banasiak Katedra Informatyki Technicznej Wydział Elektroniki PROLOG akronim od PROgramming in LOGic Prolog został stworzony w 1971 przez Alaina Colmeraurera i Philipa Roussela. Podstawy teoretyczne
Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
RACHUNEK ZDAŃ 7. Dla każdej tautologii w formie implikacji, której poprzednik również jest tautologią, następnik także jest tautologią.
Semantyczne twierdzenie o podstawianiu Jeżeli dana formuła rachunku zdań jest tautologią i wszystkie wystąpienia pewnej zmiennej zdaniowej w tej tautologii zastąpimy pewną ustaloną formułą, to otrzymana
Dariusz Banasiak. Instytut Informatyki, Automatyki i Robotyki. Politechniki Wrocławskiej
Dariusz Banasiak Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej PROLOG akronim od PROgramming in LOGic Prolog został stworzony w 1971 przez Alaina Colmeraurera i Philipa Roussela.
Tablice. Jones Stygar na tropie zmiennych
Tablice Jones Stygar na tropie zmiennych Czym jest tablica? Obecnie praktycznie wszystkie języki programowania obsługują tablice. W matematyce odpowiednikiem tablicy jednowymiarowej jest ciąg (lub wektor),