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.

Podobne dokumenty
Programowanie w logice Prolog 1

Programowanie w logice Prolog 2

Programowanie w logice

Programowanie w Logice

PODSTAWY SZTUCZNEJ INTELIGENCJI

Wprowadzenie do Prologa

Programowanie deklaratywne

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

Programowanie deklaratywne

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

Projekt 4: Programowanie w logice

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

Prezentacja do pobranie:

PROLOG INNE PRZYKŁADY MACIEJ KELM

Programowanie deklaratywne

Programowanie w logice Prolog 3

Programowanie deklaratywne

Laboratorium przedmiotu Paradygmaty Programowania

Podstawy języka PROLOG

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

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 =

Programowanie deklaratywne

Języki programowania deklaratywnego

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

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

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

RBD Relacyjne Bazy Danych

Programowanie w logice

Definicje wyższego poziomu

Programowanie w Logice Struktury danych (Lista 2)

Programowanie w Logice

Internet Semantyczny i Logika I

Prolog. Programowanie

Jak tworzyd filtry? W jaki sposób odbywa się filtrowanie w systemie pokaż/ukryj pytania?

Programowanie w logice

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Algorytmy i struktury danych. Wykład 4

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

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

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

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

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

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

LOGIKA I TEORIA ZBIORÓW

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

Obóz Naukowy Olimpiady Matematycznej Gimnazjalistów

ZMIENNE. Podstawy PHP

Paradygmaty programowania

Poprawność semantyczna

Języki programowania Prolog

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Wykład 0 Informacje Podstawowe

Pętla for. Wynik działania programu:

W naukach technicznych większość rozpatrywanych wielkości możemy zapisać w jednej z trzech postaci: skalara, wektora oraz tensora.

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

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

Semantyka rachunku predykatów

Programowanie w Turbo Pascal

Prolog Wejście / wyjście r

Laboratorium nr 3 - Sztuczna Inteligencja Listy i operacje na listach

JĘZYKI PRZETWARZANIA SYMBOLICZNEGO

Języki programowania deklaratywnego

Jak logik przewozi kozę przez rzekę?

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

WYRAŻENIA ALGEBRAICZNE

Notacja. - operator implikacji, - operator koniunkcji v operator alternatywy - operator równoważności ~ operator negacji Duża litera (np.

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

JAVAScript w dokumentach HTML - przypomnienie

Program znajduje największa lub najmniejsza z podanych liczb. Liczby podajemy dopóki nam sie nie znudzi.

Zadanie 1. Potęgi (14 pkt)

Metody Kompilacji Wykład 3

Instrukcja do testu z matematyki zdania logiczne, wyrażenia algebraiczne, równania kwadratowe Zakres materiału

Statyczne i dynamiczne predykaty

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Arytmetyka liczb binarnych

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

Konfiguracja programu

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

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

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

Prolog przetwarzanie list. Maciej Krzywonos Łukasz Dajcz

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

enova Systemowe Narzędzia Projektowe

Dynamiczne struktury danych

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

Dedukcyjne bazy danych i rekursja

Dedukcyjne bazy danych i rekursja

Matematyka Dyskretna Zestaw 2

Teoria liczb. Zajmuje się własnościami liczb, wszystkim całkowitych

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

C++ wprowadzanie zmiennych

3. Instrukcje warunkowe

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

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Matematyka Dyskretna 2/2008 rozwiązania. x 2 = 5x 6 (1) s 1 = Aα 1 + Bβ 1. A + B = c 2 A + 3 B = d

Programowanie obiektowe

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

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Funkcje wbudowane PHP

Transkrypt:

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 obiekty i związki między nimi.

Fakty Fakty opisują obiekty i relacje między nimi. W Prologu fakty zapisujemy następująco: Przykłady: predykat(argumenty). mezczyzna(tomek). kobieta(ala). lubi(tomek,ala). wiek(tomek,30). rodzic(maria,renata,tomek).

Fakty Nazwy: tomek, ala, alicja, renata dotyczące konkretnych obiektów pisane są z małej litery. Każdy obiekt musi posiadad interpretację. Nazwy relacji i obiektów są całkowicie dowolne*. Poprzedni przykład, ale inaczej zapisany: a(b). c(d). e(b,d). f(b,21). g(h,i,b). interpretacja a mężczyzna b Tomek... Zbiór faktów nazywamy bazą danych.

Zapytania Dysponując bazą danych możemy zadawad dotyczące jej zapytania. W Prologu fakty zapisujemy następująco: Przykłady:?-predykat(argumenty).?-mezczyzna(tomek).?-mezczyzna(ala).?-lubi(tomek,ala).?-wiek(tomek,30).?-rodzic(maria,ala,tomek).

Zapytania Jeżeli zadajemy zapytanie Prolog przeszukuje bazę danych i szuka faktów pasujących do faktu podanego w zapytaniu. Dwa fakty pasują do siebie jeżeli mają te same predykaty (tak samo pisane) i te same argumenty. Jeżeli poszukiwanie zakooczy się sukcesem Prolog odpowiada YES (TRUE), w przeciwnym razie NO (FALSE).

Zapytania Przykład Rozważmy bazę danych: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka)...i zapytania:?- lubi(tomek,ryby). true.?- lubi(tomek,frytki). false.?- lubi(ala,ksiazka). true.

Zapytania Przykład Rozważmy bazę danych:..i zapytania: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka).?- lubi(ala,ksiazka). true.?- lubi(ala,rower). false.?- kobieta(ala). ERROR: toplevel: Undefined procedure: kobieta/1 (DWIM could not correct goal)

Zapytania W przypadku gdy zadamy zapytanie o relację (predykat), której nie ma w bazie danych zachowanie zależy od systemu. W powyższym przykładzie system zwrócił informację o błędzie. W przypadku gdy zadamy zapytanie o obiekt, którego nie ma w bazie danych Prolog zwraca odpowiedź NO (FALSE).

Zmienne Potrafimy już tworzyd zapytania dotyczące konkretnych obiektów. Możemy np. zapytad:?- lubi(tomek,ryby). Czy możemy jedna zapytad nie o to czy Tomek lubi konkretną rzecz, ale o to co lubi w ogóle?. Zapytania takie możemy formułowad wykorzystując zmiennych. Zmienne pisane są z dużej litery. Zmienna może byd ukonkretniona lub nieukonkretniona.

Zmienne Przykład Rozważmy zapytanie: gdzie X jest zmienną.?- lubi(tomek,x). Prolog przeszukuje wszystkie fakty z bazy danych w celu znalezienia obiektu, który może zastąpid zmienną. A zatem wyszukiwane są wszystkie obiekty, które lubi Tomek.

Zmienne Przykład Rozważmy zapytanie: gdzie Kto jest zmienną.?- lubi(kto,ksiazka). Prolog przeszukuje wszystkie fakty z bazy danych w celu znalezienia obiektu, który może zastąpid zmienną. A zatem wyszukiwane są wszystkie obiekty, które lubią książkę.

Zmienne Przykład Rozważmy ponownie bazę danych: i zapytanie: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka).?- lubi(tomek,x).

Zmienne Przykład Początkowo zmienna X nie jest ukonkretniona. Prolog przeszukuje wszystkie fakty z bazy danych w celu znalezienia obiektu, który może zastąpid zmienną. Precyzyjniej Prolog wyszukuje dowolne fakty z predykatem lubi i pierwszym argumentem tomek, drugi argument może byd dowolny. Kiedy fakt taki zostaje znaleziony wówczas X staje się zmienną ukonkretnioną i przyjmuje wartośd drugiego argumentu ze znalezionego faktu.

Zmienne Przykład Dla bazy danych: Prolog zwraca: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka).?- lubi(tomek,x). X = ryby Prolog przeszukuje bazę danych w takiej kolejności jak ją wpisano.

Zmienne Przykład Kiedy Prolog znajduje fakt pasujący do zapytania oznacza to miejsce w bazie danych i czeka na dalsze polecenia. Wciśnięcie klawisza Enter powoduje zakooczenie wyszukiwania. Wciśnięcie klawisza ; (i Enter) powoduje dalsze przeszukiwanie bazy danych od miejsca oznaczonego wcześniej.

Zmienne Przykład Dla bazy danych: Prolog zwraca: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka).?- lubi(tomek,x). X = ryby ; X = ala ; X = ksiazka. Wciskamy klawisz ; Prolog przeszukuje bazę danych w takiej kolejności jak ją wpisano.

Zmienne Przykład Rozważmy ponownie bazę danych: i zapytanie: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka).?- lubi(kto,ksiazka).

Zmienne Przykład Prolog zwraca: Prolog zwraca: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka).?- lubi(kto,ksiazka). Kto = ala.?- lubi(kto,ksiazka). Kto = ala ; Kto = tomek. Wciskamy klawisz Enter Wciskamy klawisz ;

Zmienne Przykład lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka). Dla tej samej bazy danych rozważmy zapytanie z dwiema zmiennymi (Kto i Co): Wynik:?- lubi(kto,co).?- lubi(kto,co). Kto = tomek, Co = ryby ; Kto = tomek, Co = ala ; Kto = ala, Co = ksiazka ; Kto = tomek, Co = ksiazka. Wciskamy klawisz ;

Koniunkcje Wiemy już jak budowad proste zapytania. Zapytania możemy łączyd i uzyskiwad w ten sposób zapytania bardziej złożone. Możemy zapytad np. o rzeczy, które są lubiane i przez Tomka i przez Alę. Wykorzystujemy w tym celu koniunkcję zapytao oznaczaną przecinkiem. Problem składa się wówczas z dwóch odrębnych celów.

Zmienne Przykład lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka). Dla powyższej bazy danych rozważmy zapytanie:?- lubi(tomek,ala),lubi(ala,tomek). Wynik: koniunkcja?- lubi(tomek,ala),lubi(ala,tomek). false. Aby spełniona była koniunkcja muszą byd spełnione oba cele (wszystkie cele składowe). W przypadku rozważanej bazy danych cel pierwszy jest prawdziwy, cel drugi nie.

Zmienne Przykład lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka). Dla powyższej bazy danych rozważmy zapytanie z jedną zmienną:?- lubi(tomek,co),lubi(ala,co). Prolog najpierw próbuje spełnid pierwszy cel zapytania. Jeżeli odpowiedni fakt zostanie znaleziony w bazie danych wówczas to miejsce w bazie zostanie oznaczone (znacznik 1) i Prolog próbuje spełnid drugi cel. Jeżeli to się uda wówczas drugie miejsce w bazie zostaje oznaczone (znacznik 2) i Prolog zwraca rozwiązanie.

Zmienne Przykład a zatem dla zapytania: lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka). otrzymujemy:?- lubi(tomek,co),lubi(ala,co).?- lubi(tomek,co),lubi(ala,co). Co = ksiazka. Jeżeli drugi cel nie zostanie spełniony wówczas Prolog stara się inaczej spełnid cel poprzedni. Prolog zaczyna ponownie przeszukiwad bazę danych od znacznika 1, a nie od początku (mechanizm nawracania).

Mechanizm nawracania Rozważmy zapytanie:?- lubi(tomek,x),lubi(ala,x). Kolejne etapy znajdowania rozwiązania: 1. Uzgodniony jest cel pierwszy zmienna X przyjmuje wartośd ryby.?- lubi(tomek,x),lubi(ala,x). ryby ryby lubi(tomek,ryby). lubi(tomek,ksiazka). lubi(ala,ksiazka). lubi(tomek,ala).

Mechanizm nawracania 2. Następuje próba uzgodnienia drugiego celu. 3. Drugi cel zawodzi.?- lubi(tomek,x),lubi(ala,x). ryby ryby lubi(tomek,ryby). lubi(tomek,ksiazka). lubi(ala,ksiazka). lubi(tomek,ala). 3. Następuje nawrót poprzednia wartośd zmiennej X jest odrzucona. Próbujemy ponownie uzgodnid pierwszy cel.

Mechanizm nawracania 4. Ponownie uzgodniony jest cel pierwszy zmienna X przyjmuje wartośd ksiazka.?- lubi(tomek,x),lubi(ala,x). ksiazka ksiazka lubi(tomek,ryby). lubi(tomek,ksiazka). lubi(ala,ksiazka). lubi(tomek,ala). 5. Ponownie następuje próba uzgodnienia drugiego celu.

Mechanizm nawracania 6. Drugi cel jest uzgodniony.?- lubi(tomek,x),lubi(ala,x). ksiazka ksiazka lubi(tomek,ryby). lubi(tomek,ksiazka). lubi(ala,ksiazka). lubi(tomek,ala). 7. Prolog informuje o udanym uzgodnieniu koniunkcji i czeka na odpowiedź.

Reguły W Prologu reguły pozwalają nam zapisad, że jakiś fakt zależy od grupy innych faktów. Reguły odpowiadają w języku naturalnym sformułowaniom zawierającym słówko jeżeli np.: Używam parasola, jeżeli pada. Iza jeździ autobusem miejskim, jeżeli jest zima. Patryk chodzi do kina, jeżeli nie ma tłoku. Marek kupuje wino, jeżeli jest taosze od piwa.

Reguły Reguły mogą byd wykorzystywane do zapisywania definicji np. Inny przykład: X jest ptakiem jeżeli: X jest zwierzęciem i X ma pióra X jest ojcem Y jeżeli: X jest mężczyzną i X jest rodzicem Y

Reguły W prologu każda reguła składa się z głowy i treści. fakt1 :- fakt2,fakt3,,fakt n. głowa Przykład treśd Treśd zawiera koniunkcję celów, które muszą byd spełnione, aby głowa była prawdziwa. lubi(ala,x):-lubi(x,ksiazka). lubi(tomek,x):-kobieta(x),lubi(x,ksiazka). siostra(x,y):-kobieta(x),rodzice(x,a,b), rodzice(y,a,b).

Reguły Jeżeli z regule występuje zmienna wówczas jeżeli jest ona ukonkretniona jakimś obiektem to jest ukonkretniona w całym swoim zakresie obowiązywania czyli od głowy do kropki na koocu reguły. Na przykład jeżeli w przypadku reguły: lubi(tomek,x):-kobieta(x),lubi(x,ksiazka). zmienna X będzie ukonkretniona przez Ala wówczas Prolog będzie starał się uzgodnid cele: kobieta(ala),lubi(ala,ksiazka).

Reguły Przykład lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka). lubi(ala,x):-lubi(x,ksiazka). Zapytanie:?- lubi(tomek,x). Wynik:?- lubi(tomek,x). X = ryby ; X = ala ; X = ksiazka.

Reguły Przykład lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,ksiazka). lubi(tomek,ksiazka). lubi(ala,x):-lubi(x,ksiazka). Zapytanie:?- lubi(ala,x). Wynik:?- lubi(ala,x). X = ksiazka ; X = ala ; X = tomek ; false.

Reguły Przykład lubi(tomek,ryby). lubi(tomek,ala). lubi(ala,x):-lubi(x,ksiazka). lubi(ala,ksiazka). lubi(tomek,ksiazka). Zapytanie:?- lubi(ala,x). Wynik:?- lubi(ala,x). X = ala ; X = tomek ; X = ksiazka.

Reguły Przykład Rozpatrzmy bazę danych: mezczyzna(tomek). mezczyzna(pawel). kobieta(alicja). kobieta(renata). rodzice(renata,alicja,pawel). rodzice(tomek,alicja,pawel). siostra(x,y):- kobieta(x),rodzic(x,a,b),rodzic(y,a,b).

Reguły Przykład Interesuje nas zapytanie: siostra(x,y):- kobieta(x),rodzic(x,a,b),rodzic(y,a,b).?- siostra(renata,tomek). Prolog przetwarza je następująco: 1. Zapytanie jest dopasowane do głowy reguły siostra czyli X=renata i Y=tomek (ukonkretnienie). Znacznik odpowiadający zapytaniu ustawiony jest na regule. Prolog próbuje spełnid kolejno trzy cele z treści reguły.

Reguły Przykład siostra(x,y):- kobieta(x),rodzic(x,a,b),rodzic(y,a,b). 2. Celem jest kobieta(renata). Cel nie zawodzi jeżeli istnieje odpowiedni fakt w bazie danych. W tej sytuacji Prolog oznacza odpowiednie miejsce w bazie i przechodzi do uzgadniania następnych celów. 3. Prolog szuka faktu rodzic(renata,a,b). Znaleziony zostaje fakt rodzice(renata,alicja,pawel).

Reguły Przykład siostra(x,y):- kobieta(x),rodzic(x,a,b),rodzic(y,a,b). Zmienne A i B zostają ukonkretnione: A=alicja, B=pawel. Prolog oznacza w bazie następującą pozycję i przechodzi do uzgadniania następnego celu. 4. Prolog szuka faktu rodzic(tomek,alicja,pawel). i znajduje odpowiedni fakt w bazie. Cel udało się uzgodnid. Prolog odpowiada YES (TRUE).?- siostra(renata,tomek). true.

Klauzule predykatu Predykat definiujemy jako zbiór faktów i reguł. Nazywamy je klauzulami predykatu.

Elementy składowe programu Elementy składniowe programu: stałe nazywające konkretne obiekty i relacje. Stałe dzielą się na dwie grupy: atomy i liczby całkowite. Przykłady atomów: Przykłady liczb: mama, brat, adam,?-, :-, Dom 10, 9.99, 6.01e-27, 13456 zmienne (przez _ oznaczamy zmienną anonimową).

Elementy składowe programu struktury czyli terminy złożone. Struktury pozwalają traktowad grupę powiązanych informacji jako całośd. przykład posiada(jan,samochod). posiada(jan,samochod(toyota)). posiada(jan,samochod(toyota,avensis)). posiada(jan,zielony(samochod(toyota,avensis))).

Równość i unifikacja W prologu istnieje wbudowany predykat =. Kiedy staramy się spełnid cel:?- X=Y Prolog stara się dopasowad X i Y. Próba uczynienia X i Y równymi to tzw. unifikacja.?- a=b. false.?- a=a. true.?- 7=7. true.

Równość i unifikacja Sprawdzenie celu X=Y odbywa się według następujących reguł: Jeżeli X jest zmienną nieukonkretnioną, a Y nie jest powiązana z żadnym termem wówczas X i Y są równe i X jest ukonkretniona wartością Y.?- X=5. X = 5.?- mama(ania,marek)=y. Y = mama(ania,marek).

Równość i unifikacja Liczby całkowite i atomy są sobie zawsze równe.?- mama=mama. true.?- mama=tata. false.?- 1234=1234. true.?- 1234=1230. false.

Równość i unifikacja Dwie struktury są równe jeżeli mają taki sam funktor oraz taką samą liczbę składników a odpowiednie składniki są sobie równe.?- brat(tomek,marek)=brat(tomek,marek). true.?- brat(tomek,marek)=brat(tomek,adam). false.?- brat(tomek,marek)=brat(tomek,x). X = marek.?- brat(y,marek)=brat(tomek,x). X = marek, Y = tomek.?- 'lodz'=lodz. true.

Arytmetyka Prolog posiada predykaty wbudowane pozwalające porównywad liczby. Argumentami tych predykatów mogą byd liczby zapisane jako stałe, zmienne ukonkretnione liczbami całkowitymi lub bardziej złożone wyrażenia algebraiczne. Predykaty te mogą byd zapisane jako operatory infiksowe.

Arytmetyka Mamy do dyspozycji operatory pozwalające porównywad liczby: X=:=Y X i Y są tą samą liczbą X=\=Y X i Y są różnymi liczbami X<Y X jest mniejsze od Y X>Y X jest większe od Y X=<Y X>=Y X jest mniejsze lub równe Y X jest większe lub równe Y

Arytmetyka Przykład?- 2=:=2. true.?- 2=:=3. false.?- 2=\=3. true.?- 2=<3. true.?- 2>3. false.?- 2<X. ERROR: </2: Arguments are not sufficiently instantiated

Arytmetyka Przykład Rozważmy następującą bazę danych: wiek(tomek,21). wiek(pawel,45). starszy(x,y):-wiek(x,a),wiek(y,b),a>b. Wówczas:?- wiek(tomek,x). X = 21.?- starszy(pawel,tomek). true.?- starszy(pawel,x). X = tomek ; false.

Arytmetyka Przykład Rozważmy następującą bazę danych: wiek(tomek,21). wiek(pawel,45). starszy(x,y):-wiek(x,a),wiek(y,b),a>=b. Wówczas:?- wiek(tomek,x). X = 21.?- starszy(pawel,tomek). true.?- starszy(pawel,x). X = tomek ; X = pawel

Arytmetyka Przykład Rozważmy następującą bazę danych: bok(k,2). pole(y,x):-bok(y,z),x is Z*Z. obwod(y,x):-bok(y,z),x is 4*Z. Wówczas:?- bok(x,y). X=k, Y=2.?- pole(k,x). X=4.?- obwod(k,x). X=8.

Arytmetyka To jakich operatorów możemy użyd po prawej stronie operatora is zależy od systemu. Wszystkie implementacje Prologu obsługują: X+Y suma X i Y X-Y różnica X i Y X*Y iloczyn X i Y X/Y iloraz X i Y X//Y całkowity iloraz X przez Y X mod Y reszta z dzielenia X przez Y

Listy Lista to uporządkowany ciąg elementów. Elementami listy mogą byd dowolne terminy: stałe, zmienne i struktury W Prologu listę zapisujemy następująco: Przykłady: [element1,element2,,elementn] [a,b,cd,df,p,w] [ala,ma,kota,[a,x],y] [ ] Lista pusta

Listy Każda lista składa się z: głowy (ang. head) pierwszy element listy, ogona (ang. tail) będącego zawsze listą. Przykłady: [a,b,cd,df,p,w] - głowa: [a], ogon: [b,cd,df,p,w] [ala,ma,kota,[a,x]] - głowa: [ala], ogon: [ma,kota,[a,x]] [ ] - głowa: [ ], ogon: [ ] Listę o głowie X i ogonie Y zapisujemy: [X Y]

Listy Przykład?- [a,b,c]=[a,b,c]. true.?- [a,b,c]=[x,b,c]. X = a.?- [a,b,c]=[x,b,y]. X = a, Y = c.?- [a,b,c]=[x Y]. X = a, Y = [b, c].?- [a,b,c]=[x _]. X = a.?- [a,b,c]=[x g,h]. false.

Listy i rekurencja Rozważmy listę: [audi,ford,fiat,renault,opel,chrysler,chevrolet] Załóżmy, że chcemy dowiedzied, się czy jakaś marka samochodu jest elementem powyższej listy. W Prologu zaczynamy sprawdzad od głowy listy. Jeżeli odpowiedź jest negatywna sprawdzamy czy element należy do ogona listy. Ogon listy jest także listą więc znowu zaczynamy od głowy listy będącej ogonem aż dojdziemy do listy pustej.

Listy i rekurencja Rozważmy następującą definicję: nalezy(x,[x _]). nalezy(x,[_ Yogon]):-nalezy(X,Yogon). Wówczas:?- nalezy(a,[b,c,d]). false.?- nalezy(a,[a,c,d]). true ; false.?- nalezy(x,[a,c,d]). X = a.?- nalezy(x,[a,[a,v]]). X = a ; X = [a, v] ; false.

Listy i rekurencja cd Wówczas: nalezy(x,[x _]). nalezy(x,[_ Y]):-nalezy(X,Y).?- nalezy(x,[_ a,b,c]). true ; false.?- nalezy(x,[a _]). X = a ; true ; true ; true ; zapętlenie true ; true ; true

Listy i rekurencja Chcemy teraz zdefiniowad predykat: sklej(l,m,n) oznaczający, że lista N jest sklejeniem listy L i listy M. Rozważmy następującą definicję rekurencyjną: sklej([],x,x). sklej([x L1],L2,[X L3]):-sklej(L1,L2,L3).

Rekurencja Wówczas:?- sklej([a],[b],[c]). false.?- sklej([a],[b],[a,b]). true.?- sklej([a,b],[c,d],x). X = [a, b, c, d].?- sklej([a,b],x,[c,d]). false.?- sklej([a,b],x,[a,b,c,d]). X = [c, d].?- sklej([a,b],[a c],[a X]). X = [b,a c].?- sklej([a,b],[a c],[x Y]). X = [a] Y = [b,a c].