Patryk Kłys Aleksandra dąbrowska

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Język C/C++ Funkcje.
Programowanie obiektowe
Wzorce.
Wprowadzenie do języka skryptowego PHP
Opracował: Nowak Paweł
Projektowanie i implementacja programów obsługujących gniazdka Wykład II Zbigniew Brożbar Paweł Baranowski.
Przecinki.
Liczby Pierwsze - algorytmy
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Pisemne mnożenie liczb naturalnych
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Tablice.
Damian Urbańczyk PHP Obsługa sesji.
Tablice jednowymiarowe 1
PHP wprowadzenie.
Zapis informacji Dr Anna Kwiatkowska.
Strategia skutecznego szukania informacji w Internecie
Podstawy programowania
ADRESOWANIE WZGLĘDNE I BEZWZGLĘDNE Ćwiczenia
Opracował Wiesław Rychlicki na podstawie:
Instrukcje sterujące część 1
Podstawy programowania
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Podstawy programowania
Programowanie strukturalne i obiektowe
Programowanie w logice
Poznaj bliżej program Microsoft Office Word 2007
TABLICE C++.
Wskazówki dotyczące pisania tekstów
Pliki tekstowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików tekstowych. Pliki takie zawierają informację niezakodowaną
Elementy Rachunku Prawdopodobieństwa i Statystyki
XML – eXtensible Markup Language
Systemy Liczenia - I Przez system liczbowy rozumiemy sposób zapisywania i nazywania liczb. Rozróżniamy: pozycyjne systemy liczbowe i addytywne systemy.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Projektowanie stron WWW
Podstawy języka Instrukcje - wprowadzenie
Podstawowe zasady pisania tekstu za pomocą klawiatury komputera
Programowanie strukturalne i obiektowe C++
Excel Filtrowanie Funkcje bazodanowe
Zagadnienia AI wykład 2.
PHP + MySQL Podstawy pracy z bazą danych Damian Urbańczyk.
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Wstęp do programowania Wykład 9
Wstęp do programowania Wykład 10 Programowanie w logice.
BAZY DANYCH Microsoft Access Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej Katedra Automatyki i.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Filtrowanie, Funkcje bazodanowe
„Filtry i funkcje bazodanowe w EXCELU”
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Liczby 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, …(i tak dalej) nazywamy liczbami naturalnymi. Tak jak z liter tworzy się słowa, tak z cyfr tworzymy liczby. Dowolną.
Prolog - wprowadzenie Wojciech Besler Paweł Madej
Temat: Tworzenie bazy danych
Liczby naturalne i całkowite Spis treści Definicje Działania na liczbach Wielokrotności liczb naturalnych Cechy podzielności Przykłady potęg,potęgi o.
Liczbami naturalnymi nazywamy liczby 0,1,2,3,..., 127,... Liczby naturalne poznaliśmy już wcześniej; służą one do liczenia przedmiotów. Zbiór liczb.
Zmienne typy danych w VBA. MS Excel – typy danych w języku programowania VBA.
Dariusz Nikiel. Klawisza ENTER używamy w celu zakończenia akapitu, a nie na końcu każdej linijki tekstu lub zdania. Klawisza ENTER używamy w celu zakończenia.
Nawracanie i odcięcie Jakub Czoboda, Jezierski Aleksander, Skierkowski Paweł, Bembenista Kamil, Martynowski Witold.
Prolog Tutorial Introduction
PROLOG z BLISKA Przygotowali: Konrad Daniszewski, Adam Kuliński, Konrad Poszwiński, Arkadiusz Trzciński.
Zastosowanie układów równań do rozwiązywania zadań tekstowych
Operacje na ciągach znaków
A closer look.
Haskell Składnia funkcji.
PGO Porównywanie obiektów
Zapis prezentacji:

Patryk Kłys Aleksandra dąbrowska Prolog - Tutorial introduction - Closer look na podstawie książki William F. Clocksin, Christopher S. Mellish - „Programming in Prolog” Patryk Kłys Aleksandra dąbrowska

Tutorial introduction

Słowem wstępu Prolog jest językiem programwania używanym do rozwiązywania problemów, które obejmują obiekty oraz relacje między nimi Gdy mówimy „John ma książkę”, deklarujemy relacje posiadania pomiędzy jednym obiektem „John” a drugim „książka” Ponadto relacje mają swoją kolejność tj. John ma książkę ale książka nie ma Johna

Programowanie Programowanie w prologu składa się z: Sprecyzowania faktów o obiektach i ich relacjach Zdefiniowania zasad o obiektach i ich relacjach Zadawania pytań o obiekty i ich relacje Dla przykładu przypuśćmy, że powiemy Prolog’owi zasadę dotyczącą sióstr. Następnie możemy zadać pytanie czy Mary i Jane są siostrami. Prolog przeszuka wszystko co powiedzieliśmy mu na temat Mary i Jane i zwróci nam odpowiedz true lub false zależnie od tego co wcześniej powiedzieliśmy mu na ten temat.

Fakty Przypuśćmy, że chcemy powiedzieć Prolog’owi fakt, że „John lubi Mary”. Fakt ten składa się z dwóch obiektów „John” oraz „Mary” a także relacji nazwanej przez nas „lubi”. W prologu musimy zapisać to w następującej formie: lubi(john, mary). Ważne! Nazwy wszystkich obiektów i relacji powinny być zapisane z małej litery. Dla przykładu „lubi”, „john”, „mary” Najpierw podajemy nazwę relacji dopiero potem podajemy obiekty, których dotyczy dana relacja po przecinku w nawiasie zwykłym Na końcu każdego faktu musi znajdować się „ . ” kropka

Fakty c.d. Gdy definiujemy relacje między dwoma obiektami powinniśmy zwrócić uwagę na ich kolejność w nawiasach. We wcześniejszym przykładzie powiedzieliśmy o tym że „John lubi Mary” jednak nie jest to to samo co „Mary lubi John” Aby relacja była dwukierunkowa musimy dopisać kolejny fakt w prologu, a mianowicie lubi(mary, john).

Zapytania Załóżmy następujące fakty lubi(joe, ryba). lubi(joe, mary). lubi(mary, ksiazka). lubi(john, ksiazka). lubi(john, francja). Jeśli zapiszemy wszystkie te fakty w Prolog’u będziemy mogli zapytać o nie a Prolog udzieli nam odpowiedzi w następujący sposób ?- lubi(joe, pieniadze). false ?- lubi(mary, joe). false ?- lubi(mary, ksiazka). true

Zapytania c.d. W Prolog’u odpowiedz false, nie jest dosłowna. Tak naprawdę oznacza to, że „nic nie jest związane z pytaniem” Dla przykładu przypuśćmy następujące 3 fakty czlowiek(andrzej). czlowiek(karol). warszawiak(karol). Zadajmy następujące pytania ?- warszawiak(karol). true ?- warszawiak(andrzej). false Dostaliśmy odpowiedź false mimo tego, że tak naprawdę może istnieje Andrzej będący mieszkańcem warszawy. Dlatego odpowiedź tą powinniśmy interpretować raczej jako informację że Prolog nie ma na ten temat żadnych informacji

Zapytania c.d. Co się stanie jeśli zapytamy Prolog’a o relację która nie istnieje w bazie? Dla przykładu zapytajmy: ?- wspolokator(andrzej, karol). ERROR: Undefined procedure: king/2 (DWIM could not correct goal) Uzyskaliśmy błąd ponieważ pomimo tego że andrzej oraz karol znajdują się w naszej bazie to nie mamy zdefiniowanej relacji wspolokator

Zmienne Jeśli chcemy się dowiedzieć się Co John lubi a nie Czy John lubi posłużymy się zmiennymi. I tak dla przykładu gdybyśmy chcieli zapytać „Co lubi John” posłużymy się zmienną „X” w następujący sposób: ?-lubi(john, X). X = ksiazka ; X = francja.

Zmienne c.d. W momencie zapytania Polog przeszukuje naszą bazę w poszukiwaniu obiektów powiązanych relacją „lubi” z obiektem „John” Kiedy prolog natrafia na pierwsze powiązanie czeka na naszą reakcje i tak aby: Kontynuować wyszukiwania podajemy „;” średnik i naciskamy ENTER Jeśli jesteśmy usatysfakcjonowaniu z naszego obecnego wyniku wyszukiwania i nie chcemy szukać dalszych powiązań wystarczy po prostu wcisnąć ENTER

Spójniki Przypuśćmy że chcielibyśmy zapytać o bardziej skomplikowane relacje jak na przykład: „Czy John i Mary lubią się nawzajem?” Przypuśćmy że mamy poniższą bazę: lubi(mary, czekolada). lubi(mary, wino). lubi(john, wino). lubi(john, mary). Gdy chcemy zapytać „Czy John lubi Mary i Mary lubi John?” posłużymy się „ , ” przecinkiem w następujący sposób: ?-lubi(john,mary) , lubi(mary,john). false.

Spójniki c.d Spójnik „i” zastępuje przecinek I tak aby zapytać „ Co lubi John i Mary?” zrobimy to następująco: lubi(john,X),lubi(mary,X). X = wino . Wyszukiwanie działa tak samo jak w przypadku innych zapytań: „ ; ” + ENTER pokazuje kolejne wyniki Sam ENTER kończy wyszukiwanie

Reguły W Prologu reguł używa się do zapisania, że jakiś fakt zależy od grupy innych faktów. W jeżyku polskim do stworzenia reguły używamy słówka „jeśli”, na przykład: Używam parasola, jeśli pada. Reguł używa się też do zapisywania definicji, na przykład: X jest ptakiem jeśli: X jest zwierzęciem i X ma pióra.

Reguły c.d. Przypuśćmy następujące fakty: jedzenie(czekolada). jedzenie(herbatniki). lubi(mary,czekolada). lubi(mary,cola) lubi(jim,herbatniki). lubi(kim,koty). lubi(sarach,czekolada). lubi(john,X):-lubi(X,czekolada). Gdy zapytamy o to kogo lubi John uzyskamy następującą odpowiedź: ?- lubi(john,X). X = mary ; X = sarach ; false. Jak widzimy mimo tego że nie napisaliśmy bezpośrednio że John lubi Mary i Sarach dzięki ostatniej linijce uzyskaliśmy dany rezultat

Reguły c.d. Nasze reguły mogą być bardziej złożone. Ważne aby były one rozdzielane przecinkami np.: lubi(john,X):-lubi(X,czekolada), lubi(X,cola). W odpowiedzi dostaniemy już inny wynik: ?- lubi(john,X). X = mary ; false.

A closer look

Składnia Składnia języka opisuje, w jaki sposób możemy dopasowywać słowa do siebie. W Angielskim, składnia zdania "Widzę zebry" jest poprawna, ale składnia "zebrę widzę ja„ nie jest poprawne. W pierwszym rozdziale nie omawialiśmy składni Prologu wyraźnie, ale po prostu pokazaliśmy, jak wyglądały niektóre części Prologa. Tutaj my podsumujemy składnię tych części Prologa, które widzieliśmy do tej pory. Programy Prolog zbudowane są na podstawie terminów. Termin jest albo stałą, zmienną, albo struktura. Widzieliśmy każde z tych terminów w poprzednim rozdziale, ale nie znaliśmy ich pod ich nazwami. Każdy termin jest zapisany jako ciąg znaków.

Składnia c.d. Terminy są podzielone na cztery kategorie w następujący sposób: Pierwszy rząd składa się z wielkich liter. Drugi wiersz składa się z małych liter. Trzeci wiersz składa się z cyfr. Czwarty wiersz składa się ze znaków specjalnych.

Stałe Stałe nazywają określone obiekty lub określone relacje. Istnieją dwa rodzaje: atomy liczby Przykładami atomów są nazwy które nadawaliśmy poprzednio lubi mary john ksiazka czekolada Specjalne symbole, które Prolog używa do oznaczania pytań "? -" i zasady ": -" są również atomami.

Stałe c.d. Istnieją dwa rodzaje atomów: te złożone z liter i cyfr oraz te złożone ze znaków. Pierwszy rodzaj zwykle zaczyna się od małej litery, podobnie jak wszystkie te, które widzieliśmy w poprzednim rozdziale. Czasami może być konieczne posiadanie atomu zaczynającego się od dużej litery lub cyfry. Jeśli atom jest zamknięty w jednym cudzysłowie wtedy atom może mieć dowolne znaki w swojej nazwie. " ", Podkreślenie znak "_" można wstawić w środku atomu, aby poprawić czytelność.

Zmienne Zmienne wyglądają jak atomy, z wyjątkiem nazw rozpoczynających się od dużej litery lub znaku podkreślenia „ _ ” Zmienna powinna być uważana za stojącą dla jakiegoś obiektu, którego nie jesteśmy w stanie lub niechętnie wymieniany w chwili pisania programu W przykładowych klauzulach Prologa, które widzieliśmy do tej pory, używaliśmy zmiennych o nazwach takich jak X, Y i Z. Jednak nazwy mogą być takie same jak długo chcesz, na przykład: Odpowiedz Slepa_mysz_3 Bardzo_dluga_nazwa_zmiennej

Zmienne c.d. Czasem trzeba użyć zmiennej, ale jej nazwa nigdy nie będzie używana. Na przykład, jeśli chcemy dowiedzieć się, czy ktoś lubi Johna, ale nie musimy wiedzieć, kto to jest, możemy użyć anonimowej zmiennej. Anonimowa zmienna jest zapisywana jako pojedynczy znak podkreślenia. Nasz przykład został napisany w Prologu jako: ?lubi(_,john) true .

Struktury Trzecim rodzajem terminu, z którymi są pisane programy Prolog, to struktura. Struktura jest pojedynczym obiektem składającym się z kolekcji innych obiektów, nazywanych komponentami. Komponenty są zgrupowane w jedną strukturę dla wygody w posługiwaniu się nimi.

Struktury c.d. Rozważmy następujący fakt, że John jest właścicielem książki zatytułowanej Metro 2033 napisanej przez Dmitrija Głuchowskiego owns(john, ksiazka(metro_2033, gluchowski)). Mamy strukturę o nazwie książka, która ma dwa składniki, tytuł i autor. Jeśli chcemy, możemy również mieć inną strukturę nazwiska autora owns(john, ksiazka(metro_2033, autor(dmitrji, gluchowski))).

Struktury c.d. O nasze struktury możemy również wypytywać Prologa. Na przykład: ?- posiada(john,ksiazka(X,autor(Y,gluchowski))). X = metro_2033, Y = dmitrij. ?- posiada(john,ksiazka(_,autor(_,gluchowski))). true.

Znaki Nazwy stałych i zmiennych są zbudowane z ciągów znaków Mimo że każdy rodzaj nazwy (atom, liczba całkowita, zmienna) ma specjalne zasady dotyczące znaków, dobrze jest wiedzieć, jakie są wszystkie znaki które Prolog rozpoznaje Poniżej znajdują się wszystkie znaki drukowane które można wykorzystać ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnoprstuvwxyz 012345678 9 ! "# $% & '() = - ~ A | \ {} [] _ ​​'@ +; *: <>,.? /

Arytmetyka Wiele osób używa komputerów do wykonywania operacji na liczbach. Operacje arytmetyczne są przydatne do porównywania liczb i do obliczania wyników Najpierw rozważ porównywanie liczb. Biorąc pod uwagę dwie liczby, możemy stwierdzić, czy jedna liczba jest równa drugiej lub mniejsza od drugiej lub większa od drugiej. Do porównywania liczb będziemy używać tych predyktów: X =: = Y X i Y oznaczają tę samą liczbę X = \ = Y X i Y oznaczają różne liczby X <Y X jest mniejsze niż Y X> Y X jest większe niż Y X = <Y X jest mniejsze lub równe Y X> = Y X jest większe lub równe Y

Arytmetyka c.d Dla przykładu posłużymy się bazą danych królów i dat kiedy sprawowali oni władzę w naszym państwie: panowal(boleslaw_chrobry,1025,1025). panowal(mieszko_2,1025,1031). panowal(boleslaw_szczodry,1076,1079). panowal(przemysl_2,1295,1296). panowal(wladyslaw_lokietek,1320,1333). krol(X,Y):-panowal(X,A,B),Y>=A,Y=<B.

Arytmetyka Teraz możemy zapytać Prologa np. Czy Bolesław Chrobry był królem polski w 1025r: ?- krol(boleslaw_chrobry,1025). true. Możemy również dowiedzieć się kto sprawował władze w danym roku: ?- krol(X,1077). X = boleslaw_szczodry .

Koniec Dziękujemy za uwagę