Prolog kowalcr/PDN/Prolog1.pdf · Jan Wielemaker, SWI-Prolog, ... menu

  • View
    213

  • Download
    0

Embed Size (px)

Text of Prolog kowalcr/PDN/Prolog1.pdf · Jan Wielemaker, SWI-Prolog, ... menu

Prolog

programowanieROZDZIA 1: WPROWADZENIE

ROZDZIA 2: PROLOG Z BLISKA

NA PODSTAWIE: PROLOG. PROGRAMOWANIE- W. F. CLOCKSIN, C. S. MELLISH

AUTOR OPRACOWANIA: BARTOMIEJ KAFTAN

26.04.2016

1Prezentacja do pobranie:

www.barkaf.cba.pl/prezentacja.rar

Instalacja Prologu w rodowisku Windows

Wspczenie jest dostpnych szereg

implementacji Prologu, w tym

swobodnie dostpne kompilatory

Prologu:

Jan Wielemaker, SWI-

Prolog, http://www.swi-prolog.org

Daniel Diaz, GNU-

Prolog, http://gnu-prolog.inria.fr

2

Instalacja Prologu w rodowisku Windows

Pobieramy plik wykonywalny, i

instalujemy rodowisko do

programowania w jzyku Prolog:

3

Po zainstalowaniu mamy skrt w

menu start z pozytywnie

wygldajc ikonk:

Uruchomienie zainstalowanego

rodowiska: Stwrzmy pierwsz baz danych, ktra posuy nam do wykonanie pierwszych

zapyta:

Tworzymy plik tekstowy z rozszerzeniem *.pl

W jego treci wpiszemy przykadowe dane:

4

Skrypty z rozszerzeniem pl zapisujemy w domylnymkatalogu dla skryptw, bdzie to zapewne folderProlog w katalogu Moje dokumenty.

Pierwszy program w Prologu

adujemy baz danych poleceniem:

[nazwa_pliku bez rozszerzenia pl].

W naszym przypadku [fam].

Pojawi si true w przypadku poprawnego

zaadowania bazy danych.

Nastpnie wywoujemy polecenie:

?- kobieta(X).

X = kasia pierwszy wynik, nastpny

wywoamy naciskajc rednik.

X = eliza kolejny wynik.

Wyniki s zgodne z zadan baz

danych.

5

Podstawowe polecenia

Kad linie kodu koczymy kropk:

cd('C:/Users/bk/Documents/Prolog').

pwd.

write(Hello World).

Zakoczenie pracy w powoce:

halt.

Komentarz w skryptach:

% tre komentarza jednolinijkowego

/* komentarz wielolinijkowy */

6

Podstawowe polecenia adowanie bazy do interpretera:

[nazwa_pliku].

[cieka/nazwa_pliku.pl']

Domylne miejsce przechowywania baz danych:

pwd. sprawdzenie domylnego miejsca na baz.

cd(cieka/do/katalogu'). zadanie nowego miejsca zacigania bazdanych.

Wywietlenie zawartoci wczytanej bazy danych:

listing. wywietlenie bazy.

listing(predykat). informacja na temat danego predykatu

apropos(nazwa) informacje na temat predykatw zawierajcychzadan nazw

7

Podstawowe polecenia Sposoby uzyskania pomocy:

help. wywietla cay manual

help(predykat) np. help(write). wywietli informacje na temat danego

predykatu.

Narzdzia do edycji skryptw:

emasc.uruchamia edytor emacs

zwyky notatnik,

okno swi-prolog file/edit

Operatory:

, - operator and

; - operator or

8

Prolog jako jzyk programowania logicznego

Programowanie logiczne:

- programowanie w logice;

- programowanie w jzyku logiki;

Programowanie logiczne, jest to metoda programowania, bdca odmian

programowania deklaratywnego.

9

Programowanie deklaratywne - programista opisuje warunki, jakie musi spenia kocowe

rozwizanie (co chcemy osign), a nie szczegow sekwencj krokw, ktre do niego

prowadz (jak to zrobi). Programowanie deklaratywne czsto traktuje programy jako pewne

hipotezy wyraone w logice formalnej, a wykonywanie oblicze jako ich dowodzenie.

Programowanie deklaratywne jest szczeglnym przedmiotem zainteresowania naukowcw, gdy

dziki minimalizacji lub eliminacji skutkw ubocznych moe znaczco uproci tworzenie

programw wspbienych. Paradygmat programowania deklaratywnego obejmuje szerok

gam jzykw programowania i bardziej szczegowych paradygmatw podrzdnych.

Przykadami programowalnych jzykw deklaratywnych s jzyki funkcyjne i logiczne takie, jak

Ocaml, XSLT czy Prolog.

Prolog pocztki

Nazwa jzyka Prolog pochodzi od francuskiego Programmation en

Logique, mona to przetumaczy jako programowanie w logice.

Prolog powsta jako jzyk programowania sucy do automatycznej

analizy jzykw naturalnych, jest jednak jzykiem oglnego

zastosowania, szczeglnie dobrze sprawdzajcym si w programach

zwizanych ze sztuczn inteligencj. Prolog w przeciwiestwie do

wikszoci popularnych jzykw jest jzykiem deklaratywnym.

Prolog zosta stworzony w 1971 roku przez Alaina Colmeraurera i

Phillipe'a Roussela.

10

Zastosowanie jzyka Prolog

Relacyjne bazy danych,

Logika matematyczna,

Rozwizywanie problemw abstrakcyjnych,

Przetwarzanie jzyka naturalnego,

Automatyzacja projektowania,

Symboliczne rozwizywanie rwna,

Analiza struktur biochemicznych,

Rne zagadnienia z dziedziny sztucznej inteligencji.

11

Pisanie programw w Prologu

Programowanie w prologu nie polega na opisywaniu konkretnych

algorytmw, tak jak w tradycyjnych jzykach programowania. Piszc

programy w Prologu musimy zaj si formalnymi relacjami i obiektamizwizanymi z zadan problematyk, sprawdzajc prawdziwo

poszczeglnych relacji, dla zadanego problemu.

Programujc w Prologu opisujemy znane fakty i relacje dotyczce

problemu. Program powinien potrafi w duej mierze wywnioskowa,

na podstawie istniejcych faktw, o nowych faktach.

12

Obiekty i relacje

Przykad 1:

Ala ma kota.

Ala obiekt, ma relacja posiadania, kot obiekt.

Mamy do czynienia z relacj uporzdkowan poniewa, to Ala ma kota, a nie kot ma Ale.

Mona to zapisa nastpujco: posiada(ala,kot).

Przykad 2:

Piwo jest tanie.

Relacja nie musi okrela jawnie wszystkich obiektw. W przykadzie mamy relacje bycia tanim, i relacja dotyczy tutaj obiektu piwo.

Mona to zapisa nastpujco: tanie(piwo).

13

Obiekt, ale nie programowanie

obiektowe

Programowanie obiektowe: obiekt jest struktur danych, ktra moe

dziedziczy pola i metody. Pocztek programowania obiektowego to lata

6O-te, jednak popularno to lata 80-90 (jzyki Smalltalk, C++, Java).

Prolog suy do zupenie innych celw ni jzyki obiektowe. Definiujc

obiekt w Prologu mamy na uwadze nie struktur danych, ktra moe

dziedziczy pola i metody, ale obiekt rozumiemy jako byt, ktry moemy

opisa termami.

Ujednolicona struktura danych, term na jej podstawie tworzone s

wszystkie dane, oraz programy w Prologu.

14

Program w Prologu

Program zoony jest ze zbioru klauzul.

Klauzula to fakt opisujcy pewn informacj.

Klauzula to regua mwica, jak rozwizanie mona powiza z danymi faktami.

Do zapisu relacji uywamy regu.

Przykad reguy:

Dwoje ludzi to siostry, jeli oboje tyche ludzi to kobiety, oraz oboje tyche ludzi maj tych samych rodzicw.

Regua pokazuje jak sprawdzi czy dwie osoby s siostrami sprawdzamy czy obie osoby to kobiety, oraz czy obie osoby maj tych samych rodzicw.

15

Programowanie

Podstawowe pojcia:

Fakt,

Zapytanie,

Zmienna,

Poczenie,

Regua,

Listy,

Rekurencje

16

Programowanie

Programowanie w Prologu skada si z nastpujcych elementw:

Deklarowanie faktw dotyczcych obiektw i zwizkw miedzy

nimi.

Definiowanie regu dotyczcych obiektw i zwizkw miedzy nimi.

Zadawania zapyta o obiektach i zwizkach midzy nimi.

Prolog to zbir faktw i regu, ktre s uywane do udzielenia

odpowiedzi na zapytanie. Podajemy fakty i reguy, aby program

wywnioskowa nowe fakty, na podstawie istniejcych.

17

Fakty

Przykad:

lubi(adam,ewa).

Zasady:

Nazwy relacji i obiektw piszemy z maych liter.

W nazwach relacji oraz obiektw nie uywamy polskich znakw.

Najpierw piszemy relacje, a nastpnie obiekty rozdzielone przecinkami w nawiasachokrgych.

Fakt musi si koczy kropk nawizanie do jzyka naturalnego.

Wana jest kolejno podawania argumentw, poniewa to Adam lubi Ew, co nieoznacza e Ewa lubi Adama, aby to okreli musimy poda nastpny faktlubi(ewa,adam), lub utworzy odpowiedni regu.

Jako e nazwy obiektw mog by wieloznaczne, to programista decyduje jakrozumie dan nazw.

18

Nazewnictwo

Nazwy obiektw wystpujce w nawiasach nazywamy

argumentami.

Nazw relacji znajdujcej si przed nawiasem nazywamypredykatem.

Podawane nazwy s zupenie dowolne, ale dobr praktyk jest

przypisywanie nazw dajcych obraz tego, czego dana nazwa

dotyczy.

Predykaty mog mie maksymalnie 1024 argumenty.

Zbir faktw nazywamy baz danych.

Podobnie zbir regu rwnie nazywamy baz danych.

19

1024 argumenty predykatu 20

Zapytania

Po utworzeniu bazy danych, moemy zaj si pytaniami. Pytania wygldajpodobnie jak fakty, ale s poprzedzone znakiem zapytania i mylnikiem ?-.

Przykad zapytania:

?- lubi(adam,ewa).

Powysze zapytanie zwrci true jeeli w bazie danych istnieje faktlubi(adam,ewa)., oczywicie jeeli w bazie danych nie ma takiego faktu tozwrcony zostanie false.

Jeeli zapytamy o co czego nie ma w bazie, w sensie nie ma odpowiedniego predykatu, to otrzymamy informacj:

ERROR: toplevel: Undefined procedure: cosCzegoNieMa/0 (DWIM could notcorrect goal)

Oznacza to e nasza baza nie zawiera predykatu cosCzegoNieMa, wic naszezapytanie nie moe uzyska sensownej odpowiedzi.

21

Przykad uycia nieistniejce