Podstawy j ęzyka PROLOG - dariusz banasiak

39
Podstawy języka PROLOG Dariusz Banasiak Katedra Informatyki Technicznej (K30W04D03) Wydzial Elektroniki

Transcript of Podstawy j ęzyka PROLOG - dariusz banasiak

Page 1: Podstawy j ęzyka PROLOG - dariusz banasiak

Podstawy j ęzyka PROLOG

Dariusz BanasiakKatedra Informatyki Technicznej (K30W04D03)

Wydział Elektroniki

Page 2: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 2

Podstawy języka PROLOG

PROLOG – akronim od PROgramming in LOGic

Prolog został stworzony w 1971 przez Alaina Colmeraurerai Philipa Roussela. Podstawy teoretyczne sformułował Robert Kowalski.

Prolog jest nazywany językiem programowania logicznego.Podstawą dla jego utworzenia była logika predykatówpierwszego rzędu oraz zasada rezolucji.

Podstawowe implementacje:� Turbo Prolog (firma Borland) – ale to już historia !!!

� SWI-Prolog (Jan Wielemaker) � Visual Prolog (Prolog Development Center)

Page 3: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 3

Podstawy języka PROLOG

Język Prolog zalicza się do języków deklaratywnych – pro-gram opisuje jedynie zadanie, które ma zostać rozwiązane(bez podania algorytmu). Program w języku Prolog składasię z następujących elementów:

� faktów (prawdziwe stwierdzenia)� reguł (związki między faktami)� celu (określa zadanie do wykonania).

Pisząc program w Prologu określamy CO należy rozwiązać, zamiast JAK należy problem rozwiązać.

Program napisany w języku Prologu różni się zasadniczood programów w językach proceduralnych (Pascal, C, itd.),gdzie należy podać szczegółowy algorytm rozwiązaniaproblemu.

Page 4: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 4

Podstawy języka PROLOG

Podstawowe zastosowania języka Prolog

� reprezentacja wiedzy� przeszukiwanie przestrzeni stanów� rozwiązywanie problemów logicznych� dowodzenie twierdzeń� przetwarzanie języka naturalnego� realizacja systemów ekspertowych� realizacja relacyjnych baz danych� symboliczne rozwiązywanie równań� różniczkowanie i całkowanie symboliczne

Page 5: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 5

Podstawy języka PROLOG

Reprezentacja faktów

W Prologu fakty (bezwarunkowo prawdziwe twierdzenia)przedstawia się za pomocą predykatów pierwszego rzędu,których składnia wygląda następująco:

nazwa_predykatu(ob_1, ob_2, ... , ob_n).

Powyższy predykat oznacza relację określoną przeznazwa_predykatu zachodzącą pomiędzy obiektami:ob_1, ob_2, ... , ob_n, które są argumentami predykatu.

Predykat: lubi(marta, mandarynki).przedstawia fakt, że Marta lubi mandarynki (obiektami są„marta” i „mandarynki”, zaś relacją „lubi”).

Page 6: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 6

Podstawy języka PROLOG

Przy tworzeniu predykatów obowiązują następujące reguły:

� nazwa relacji (nazwa_pedykatu) jest pisana małymi literami,

� argumenty predykatu znajdują się w nawiasach i są oddzielone przecinkami,

� liczba argumentów predykatu, ich rodzaj i kolejność jest ściśle określona,

� argumentami predykatu mogą być stałe lub zmienne,� stałe pisane są małymi literami, a zmienne zaczynają się

dużą literą (stałe można umieścić również w cudzysłowie i wówczas mogą zawierać dowolne znaki),

� predykat jest zakończony kropką.

Page 7: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 7

Podstawy języka PROLOG

Uwaga:

Dwa następujące predykaty:

lubi(piotr, marta).lubi(marta, piotr).

reprezentują zupełnie różne fakty.

Page 8: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 8

Podstawy języka PROLOG

Reprezentacja reguł

Reguły są warunkowymi stwierdzeniami o istnieniu pew-nych zależności między obiektami (faktami).Język Prolog akceptuje reguły o następującej składni:

IF A1 and A2 and ... and An THEN B

W notacji języka Prolog powyższą regułę można zapisaćw jednej z dwóch postaci:

B if A1 and A2 and ... and An .B :- A1 , A2 , ... , An .

gdzie A1, A2, ... , An, B są predykatami.

Page 9: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 9

Podstawy języka PROLOG

Tworząc regułę należy pamiętać o następujących zasadach:

� nagłówek (konkluzja) reguły składa się tylko z jednego predykatu,

� część warunkową reguły stanowi koniunkcja (iloczyn) dowolnej liczby warunków,

� warunki oddzielone są słowem „and” (lub przecinkiem),� reguła zakończona jest kropką.

Jako argumenty predykatów mogą wystąpić zmienne.Przedstawiają one nazwy obiektów, które nie są w danejchwili znane. W Prologu nazwy zmiennych zaczynają sięod dużej litery lub znaku ”_”.

Page 10: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 10

Podstawy języka PROLOG

Regułę, że Marta lubi mężczyzn, którzy są przystojni i jeżdżą porsche można zapisać następująco:

lubi(marta,X) :- mezczyzna(X), przystojny(X), jezdzi(X, porsche).

W regule tej X oznacza zmienną (nieznanego w danej chwili mężczyznę), który spełnia podane warunki.

Regułę, że osoba S jest siostrą osoby X możemy zapisać następująco:

siostra(S,X) :- kobieta(S), rodzice(Matka, Ojciec, S), rodzice(Matka, Ojciec, X), S /= X.

Reguła ta przedstawia prawidłowość: S jest siostrą X, jeżeli S jest kobietą oraz X i S mają tych samych rodziców.

Page 11: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 11

Podstawy języka PROLOG

Reguły i fakty w Prologu nazywa się klauzulami.

Klauzule zawarte w programie tworzą tzw. bazę danych programu.

W bazie może znajdować się większa liczba predykatów o takiej samej nazwie. Wówczas taki zbiór predykatów będziemy nazywać procedurą.

Page 12: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 12

Podstawy języka PROLOG

Cel

Po wprowadzeniu do bazy faktów i reguł można zadawać pytania (stawiać cele do realizacji). Celem może być:� pytanie o prawdziwość faktu, � polecenia znalezienia nazw obiektów będących w relacji

z innymi obiektami.

Cel można określić przez podanie pojedynczego predykatu lub koniunkcji predykatów (tzw. cel złożony). W drugim przypadku predykaty składowe oddzielone są przecinkami (nazywamy je wówczas podcelami).

Page 13: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 13

Podstawy języka PROLOG

Jeżeli w predykacie (predykatach) celu występują tylkosymbole (stałe), to wówczas jest to pytanie o prawdziwośćfaktów. Odpowiedzią jest wówczas PRAWDA lub FAŁSZ.

Jeżeli w predykatach występują zmienne, to celem jestznalezienie wszystkich obiektów, które znajdują się w okre-ślonej relacji z innymi obiektami.

Inaczej mówiąc mogą one zastąpić zmienną w predykaciecelu nie prowadząc do sprzeczności z faktami zawartymiw bazie danych programu.

Page 14: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 14

Podstawy języka PROLOG

Przykład

Baza wiedzy zawiera następujące fakty:

lubi(jan, wino).lubi(jan, tenis).lubi(marta, jabłka).lubi(marta, wino).

Zadane pytania i uzyskane odpowiedzi:

lubi(marta, wino) odpowiedź: YESlubi(marta, tenis) odpowiedź: NOlubi(X, wino) odpowiedź: X=jan, X=martalubi(jan, X), lubi(marta, X) odpowiedź: X=winolubi(X, wino), lubi(jan, X) odpowiedź: NO

Page 15: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 15

Podstawy języka PROLOG

Mechanizm wnioskujący w Prologu

Podstawą wnioskowania w Prologu jest uzgadnianie (dopa-sowanie) klauzul zawartych w bazie wiedzy z danym celem(lub podcelami).

Klauzule próbuje się uzgadniać wtedy, gdy ich predykatysą takie same. Procesowi porównywania poddawane sąargumenty predykatów.

Ponieważ argumentem predykatu może być symbol (stała)lub zmienna mogą zachodzić dwa następujące przypadki:

Page 16: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 16

Podstawy języka PROLOG

� na tej samej pozycji występuje w jednym predykaciestała, a w drugim zmienna (wówczas zmienna przyjmujewartość symbolu) – operacja ukonkretniania,

� na tej samej pozycji występują dwie zmienne (wówczasnastępuje powiązanie zmiennych tzn. jeżeli któraś z nichw pewnym momencie zostanie ukonkretniona, to drugazmienna automatycznie przyjmie tą samą wartość) –operacja powiązania.

Operacje ukonkretniania i powiązania są bardzo istotnew procesie wnioskowania realizowanym przez mechanizmwnioskowania języka Prolog.

Page 17: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 17

Podstawy języka PROLOG

Przykłady uzgadniania klauzul:

Fakt Pytanie Uzgadnianie Rodzaj

lubi(jan, wino) lubi(X, wino) X = jan ukonkretnienie

lubi(marta, tenis) lubi(marta, Y) Y = tenis ukonkretnienie

lubi(piotr, maria) lubi(V, Z)V = piotrZ = maria

ukonkretnienie

lubi(jan, Cos) lubi(jan, X) Cos = X powiązanie

Page 18: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 18

Podstawy języka PROLOG

Przykład

Baza wiedzy zawiera następujące fakty (tekst zawarty między symbolami /* ... */ oznacza komentarz):

matka(alicja, maria). /* k1 - „alicja” jest matką „maria” */matka(ewa, piotr). /* k2 */matka(teresa, maria). /* k3 */matka(olga, jan). /* k4 */

Mamy podany cel: matka(X, maria).

Cel ten oznacza zadanie znalezienia tych matek, których córki mają na imię Maria.

Page 19: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 19

Podstawy języka PROLOG

Proces wnioskowania polega na kolejnym uzgadnianiu celuz kolejnymi klauzulami znajdującymi się w bazie wiedzy.

W danym przypadku proces ten przebiega następująco:

� w wyniku dopasowywania celu z klauzulą 1 zmienna Xzostanie ukonkretniona stałą „alicja” (cel zostałosiągnięty i następuje wyświetlenie wartości zmiennejX = alicja). Następuje też ustawianie tzw. znacznikapowrotu na klauzulę 1,

� program próbuje dopasować cel z pierwszą klauzuląznajdującą za znacznikiem - jest to klauzula nr 2 (klau-zuli tej nie da się uzgodnić z celem),

Page 20: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 20

Podstawy języka PROLOG

� w wyniku uzgodnienia klauzuli 3 z celem otrzymamy nową wartość zmiennej X (zostanie ona ukonkretniona stałą „teresa”) - program wyświetli, a znacznik pozycji zostanie przesunięty na klauzulę nr 3,

� następną klauzulą jest klauzula 4 (ponieważ nie można uzgodnić celu i jest to ostatnia klauzula w bazie wiedzy przeszukiwanie zostaje zakończone).

Zostały więc znalezione dwa rozwiązania:X = alicjaX = teresa

Page 21: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 21

Podstawy języka PROLOG

Kolejny przykład ilustruje rolę znaczników w procesie wnioskowania.

Przykład

Baza wiedzy zawiera następujące fakty i reguły:

/* 1 */ ojciec(karol,edward). /* ojciec(o,d) - o jest ojcem d */

/* 2 */ ojciec(karol,august).

/* 3 */ dziadek(X,Y) :- ojciec(X,Z),dziecko(Y,Z).

/* dziadek(d,w) - d jest dziadkiem w */

/* 4 */ dziadek(karol,maurycy).

/* 5 */ dziecko(henryk,edward). /* dziecko(d,r) - d jest dzieckiem r */

/* 6 */ dziecko(teofil,august).

Page 22: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 22

Podstawy języka PROLOG

Celem niech będzie znalezienie wszystkich wnuków Karola, co zapisujemy w sposób formalny:

goal dziadek(karol,W).

Proces wnioskowania w języku Prolog polega na próbie uzgodnienia celu po kolei z klauzulami występującymi w bazie wiedzy:

� uzgodnienie celu głównego z klauzulą 3

dziadek(karol,W). dziadek(X,Y) :- ojciec(X,Z), dziecko(Y,Z).

X = karol (ukonkretnienie), W = Y (powiązanie)podcel 1: ojciec(karol,Z)zn1 = klauzula 3 (znacznik nawracania)

u

Page 23: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 23

Podstawy języka PROLOG

� uzgodnienie podcelu 1 z klauzulą 1

ojciec(karol,Z) ojciec(karol,edward).

Z = edward (ukonkretnienie)podcel 2: dziecko(W,edward) - drugi podcel klauzuli 3zn2 = klauzula 1 (znacznik nawracania)

� uzgodnienie podcelu 2 z klauzulą 5

dziecko(W,edward) dziecko(henryk,edward).

W = henryk (ukonkretnienie)rozwiązanie: W = henryk – udowodniono oba podcele klauzuli 3zn3 = klauzula 5 (znacznik nawracania)

u

u

Page 24: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 24

Podstawy języka PROLOG

� szukanie kolejnych klauzul dla podcelu 2

Podcel 2 próbujemy uzgodnić z kolejnymi klauzulami w bazie (od miejsca wskazywanego przez znacznik zn3). Znajdujemy klauzulę 6:

dziecko(W,edward) dziecko(teofil,august).Ponieważ próba uzgodnienia kończy się niepowodzeniem i klauzula 6 jest ostatnią klauzulą w bazie należy: usunąć znacznik zn3 i wrócić do znacznika zn2 (podcel 1: ojciec(karol,Z), zn2 = klauzula 1)

� uzgodnienie podcelu 1 z klauzulą 2

ojciec(karol,Z) ojciec(karol,august).

Z = august (ukonkretnienie)podcel 2: dziecko(W,august) - drugi podcel klauzuli 3zn2 = klauzula 2 (znacznik nawracania)

u

u

Page 25: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 25

Podstawy języka PROLOG

� uzgodnienie podcelu 2 z klauzulą 6

dziecko(W,august) dziecko(teofil,august).

W = teofil (ukonkretnienie)rozwiązanie: W = teofil – udowodniono oba podcele klauzuli 3zn3 = klauzula 6 (znacznik nawracania)

� szukanie kolejnych klauzul dla podcelu 2

Podcel 2 próbujemy uzgodnić z kolejnymi klauzulami w bazie. Ponieważ klauzula 6 jest ostatnią klauzulą w bazie należy: usunąć znacznik zn3i wrócić do znacznika zn2 (podcel 1: ojciec(karol,Z), zn2 = klauzula 2)

u

Page 26: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 26

Podstawy języka PROLOG

� szukanie kolejnych klauzul dla podcelu 1

Podcel 1 próbujemy uzgodnić z kolejnymi klauzulami (od znacznika zn2). Ponieważ próba uzgodnienia kończy się niepowodzeniem należy: usunąć znacznik zn2 i wrócić do znacznika zn1 (cel główny: dziadek(karol,W), zn1 = klauzula 3).

� uzgodnienie celu głównego z klauzulą 4

dziadek(karol,W). dziadek(karol,maurycy).

W = maurycy (ukonkretnienie)rozwiązanie: W = maurycyzn1 = klauzula 4 (znacznik nawracania)

u

Page 27: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 27

Podstawy języka PROLOG

� szukanie kolejnych klauzul dla celu głównego

Cel główny próbujemy uzgodnić z kolejnymi klauzulami (od znacznika zn1). Ponieważ próba uzgodnienia kończy się niepowodzeniem należy usunąć znacznik zn1. Ponieważ nie ma już żadnych znaczników powrotu proces przeszukiwania zostaje zakończony.

W wyniku procesu wnioskowania znaleziono następujące rozwiązania:

W = henrykW = teofilW = maurycy

Page 28: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 28

Podstawy języka PROLOG

Modyfikatory procesu wnioskowania

Operator odcięcia („cut”) jest to bezargumentowy predykat,który zawsze jest prawdziwy i służy do ograniczanianawrotów. Stosowanie odcięcia może być istotne z dwóchpowodów:� program będzie działał szybciej (można pominąć cele,

których wynik uzgodnienia jest znany z góry i nie wnosząone do rozwiązania nowych elementów),

� program wymaga mniej pamięci (dla pominiętych celównie trzeba pamiętać związanych z nimi punktów nawra-cania).

Odcięcie należy stosować bardzo ostrożnie!!!

Page 29: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 29

Podstawy języka PROLOG

Odcięcie występuje przeważnie jako jeden z podcelów wczęści warunkowej reguły i uniemożliwia nawrót doktóregokolwiek z poprzedzających go podcelów przy próbieznajdowania rozwiązań alternatywnych. Oznacza to, żedany podcel zostanie uzgodniony tylko jeden raz i nie możebyć uzgodniony ponownie. Aby zastosować operator odcię-cia w odpowiednim miejscu programu należy umieścićsymbol „!” (znak wykrzyknika).

dziadek(X,Y) :- ojciec(X,Z), dziecko(Y,Z), ! . /* znajduje tylko pierwsze rozwiązanie W = henryk */

dziadek(X,Y) :- !, ojciec(X,Z), dziecko(Y,Z). /* zapobiega nawrotom do kolejnych predykatów tego samego typu – W = henryk, W = teofil */

Page 30: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 30

Podstawy języka PROLOG

Operator odcięcia wykorzystywany jest również przy defi-nicjach rekurencyjnych. Jest on wówczas konieczny doprzerwania kolejnych wywołań rekurencyjnych w momencieosiągnięcia warunku stopu.

Przykład

Procedura obliczająca silnię dowolnej liczby:

silnia(0,1) :- !.silnia(X,Y) :- N is X-1, /* operator podstawienia N = X-1 */

silnia(N,B),Y is X*B.

Zapis silnia(X, Y) oznacza, że wartość X! jest równa Y.

Page 31: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 31

Podstawy języka PROLOG

Rozpatrzmy działanie programu dla celu postaci silnia(5, Y):

1. Próba uzgodnienia celu głównego z klauzulą 1 (niepowodzenie,niezgodny pierwszy argument – w celu występuje 5, w klauzuli 1występuje 0),

2. Próba uzgodnienia celu głównego z klauzulą 2 (sukces,ukonkretnienie zmiennej X – przyjmuje ona wartość 5, zmienna Nprzyjmuje wartość 4, pojawia się podcel1: silnia(4, B), znacznik zn1dla podcelu1 ustawiony na klauzuli 2),

3. Próba uzgodnienia podcelu1 z klauzulą 1 (niepowodzenie),4. Próba uzgodnienia podcelu1 z klauzulą 2 (sukces, ukonkretnienie

zmiennej X – przyjmuje ona wartość 4, zmienna N przyjmujewartość 3, pojawia się podcel2: silnia(3, B), znacznik zn2 dlapodcelu2 ustawiony na klauzuli 2),

5. …

Page 32: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 32

Podstawy języka PROLOG

Proces wnioskowania będzie przebiegał dalej, aż dojdziemy dopodcelu5 postaci silnia(0, B). Nastąpi wówczas jego uzgodnienie zklauzulą 1, w wyniku czego zmienna B przyjmie wartość 1. Jeżeli wklauzuli 1 nie byłoby operatora odcięcia, to w kolejnym krokunastąpiłaby próba uzgodnienia podcelu5 z klauzulą 2. Ponieważ takieuzgodnienie jest możliwe pojawiłby się nowy podcel postaci:

silnia(-1, B).

Jest on jednak niezgodny z definicją silni!

Drugim operatorem modyfikującym proces wnioskowaniajest predykat „fail”. Predykat ten jest zawsze fałszywy.Najczęściej jest stosowany do wymuszenia nawrotów (jestwówczas używany łącznie z operatorem odcięcia).

Page 33: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 33

Podstawy języka PROLOG

Listy

Lista jest podstawową strukturą danych w Prologu. Jestona uporządkowanym zbiorem dowolnej liczby elementów,którymi mogą być: stałe, zmienne lub struktury (np. innelisty). Przykłady list:

[ ] - lista pusta[1,2,5,4,7][[1,2],[5,4],7] - lista zawiera inne listy

Listę można podzielić na dwa elementy: głowę (head) oraz ogon (tail). Głową jest pierwszy element listy, a ogonem pozostała część listy.

Page 34: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 34

Podstawy języka PROLOG

Z uwagi na fakt, że typową operacją związaną z listami jestich podział na głowę i ogon wprowadzono specjalny zapis[X | Y]. W tym przypadku zmienna X reprezentuje głowęlisty, natomiast zmienna Y jej ogon.

lista głowa ogon

[ ]

[1]

[1, 2, 3]

[[1, 2], 3, 4]

[1, [2, 3], [4, 5], 6]

brak

1

1

[1, 2]

1

brak

[ ]

[2, 3]

[3, 4]

[[2, 3], [4, 5], 6]

Page 35: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 35

Podstawy języka PROLOG

Wybrane operacje na listach

[X | Y] – podział listy na głowę (X) i ogon (Y)

member(X,L) – sprawdzenie czy element X należy do listy L

np. member(2,[1,2,3,4,5,6,])

append(L1,L2,L3) – utworzenie listy L3 przez dołączenie listy L2 na koniec listy L1 np. append([1,2],[5,6],X)

Page 36: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 36

Podstawy języka PROLOG

Operacje arytmetyczne w Prologu

Prolog jest językiem służącym przede wszystkim do wykonywania operacji na symbolach. Posiada on jednak również możliwości wykonywania operacji arytmetycznych na liczbach całkowitych. Służą do tego wbudowane operatory arytmetyczne:* (mnożenie), / (dzielenie) , - (odejmowanie), + (dodawanie) i mod (reszta z dzielenia).Dostępne są również operatory relacyjne: = (równy), \= (różny), < (mniejszy), > (większy), <= (mniejszy lub równy) i >= (większy lub równy).

Page 37: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 37

Podstawy języka PROLOG

Przykład

W bazie danych mamy następujące fakty:urodzony(jan,1974).

urodzony(ludwik,1979).urodzony(andrzej,1980).urodzony(marcin,1970).

Aby porównać wiek osób (kto jest starszy od kogo) można zdefiniować następujący predykat:

starszy(X,Y):- urodzony(X,R1), urodzony(Y,R2), R1<R2.

(X jest starszy od Y, jeżeli X urodził się wcześniej niż Y, R1 i R2 to rok urodzenia !)

Page 38: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 38

Podstawy języka PROLOG

Przykład

W bazie danych mamy następujące fakty:dlugosc(figura1, 20).szerokosc(figura1, 15).

Aby obliczyć pole powierzchni danej figury można użyć następującej reguły:

pole(X, Y):- dlugosc(X, W1), szerokosc(X, W2), Y=W1*W2.

Pytanie o pole figury o nazwie ’figura1’ ma wówczas postać:

pole(figura1, Y).

Page 39: Podstawy j ęzyka PROLOG - dariusz banasiak

Autor: Dariusz Banasiak – Katedra Informatyki Technicznej 39

Podstawy języka PROLOG

Operacje wejścia i wyjścia

Operacje wejścia i wyjścia umożliwiają komunikację z użyt-kownikiem podczas wykonywania programu.Predykaty odpowiedzialne za operacje wejścia/wyjścia mo-gą się różnić w zależności od stosowanej implementacjiPrologu oraz systemu operacyjnego. Przykłady wbudowa-nych predykatów wejścia-wyjścia:

read(X) – odczytuje term z bieżącego strumienia wejściowegowrite(X) – zapisuje term X do bieżącego strumienia wyjściowego nl – przejście do nowego wiersza

Przykład:

pytanie1(Dziecko) :- write(’Podaj imie’), read(X), rodzic(X, Dziecko).