Programové struktury


Cvičení 2 - Základy Prologu


Stáhnutí:


Prolog

Program popisuje "svět" Prologu = databáze faktů a pravidel.

fakta: predikát(arg1, arg2, ...argN).
cíle: ?- predikát(arg1, arg2, ...argN).
pravidla: hlava :- tělo.
predikát(argumenty) :- fakta.
Elementy programu: konstanty, proměnné, struktury
\__________________________/
termy


Unifikace


Zásady při plnění cílů


Mechanismus návratu


Důležité predikáty

I/O operace

write(X) zápis termu do výstupního proudu
nl odřádkování
tab(X) výstup X mezer
display(X) výstup jako write, ale ve funkční notaci
read(X) čtení termu ze vstupního proudu
put(X) výstup znaku na jehož ASCII kod je X instalováno
get(X) vstup ASCII kódu zobrazitelného znaku (32 a výše)
get0(X) jako get, ale i pro nezobrazitelné znaky
skip(X) přeskakuje vstupující znaky, dokud úspěšně neporovná znak s X
tell(X) přepnutí výstupu do souboru X
told uzavření souboru a přepnutí výstupu na user
see(X) přepnutí vstupu na soubor X
seen současný vstupní soubor je uzavřen a vstup přepnut na user
setdrive(X) nastavení driveru X
getdrive(X) zjištění jména aktuálního driveru
chdir(X) nastavení pracovního adresáře

Řídící predikáty a testy

true vždy splněný cíl
fail vždy nesplněný cíl
var(X) splněno, je-li X volnou proměnnou
nonvar(X) splněno, není-li X neinstalovanou proměnnou
atom(X) splněno, je-li X instalováno na atom
integer(X) splněno, je-li X instalováno na integer
atomic(X) splněno, je-li X instalováno na attom nebo integer
not(X) X musí být interpretovatelné jako cíl. Uspěje pokud X není splněn
call(X) X musí být interpretovatelné jako cíl. Uspěje pokud X je splněn
halt ukončí výpočet
X = Y pokus o porovnání X s Y
X \= Y opak =
X == Y striktní rovnost
X \== Y úspěšně splněn, neplatí-li ==
! změna mechanismu návratu
repeat nekonečněkrát splnitelný cíl
X , Y konjunkce cílů
X ; Y disjunkce cílů

Predikáty pro práci s aritmetickými výrazy

X is E E musí být aritm. výraz, který se vyhodnotí a porovná s X
E1 + E2 při instalovaných argumentech (pod. ?, *, /, mod)
E1 > E2 při instalovaných argumentech (pod. >=,<,=<,\=,=)
E1 =:= E2 uspěje, jsou-li si hodnoty E1, E2 rovny
E1 =\= E2 uspěje, nejsou-li si hodnoty E1, E2 rovny

Predikáty pro manipulaci s databází a s klauzulemi

listing(X) výpis všech klauzulí na jejichž jméno je X instalováno
listing výpis celého programu
clause(X, Y) porovnání X a Y s hlavou a s tělem klauzule
asserta(X) přidání klauzule instalované na X na začátek databáze
assertz(X) totéž, ale přidává se na konec databáze
retract(X) odstranění prvého výskytu klauzule X z databáze
findall(X,Y.Z) všechny výskyty termu X v databázi, které splňují cíl Y jsou vloženy do seznamu Z

Predikáty pro práci se strukturami

funktor(T, F, A) vytvoří strukturu T s funktorem F a aritou A
arg(N, T, A) porovná A s N-tým argumentem struktury T
X =.. L tzv."univ". Provádí porovnání termu X se seznamem L, který je složen z funktoru termu X, následovaném argumenty X
name(A, L) je-li A instalováno, převede jméno atomu A na seznam znaků a ten porovná s L. Není-li A instalováno, instaluje je znaky podle seznamu L
lenght(L, A) zjistí délku seznamu a porovná ji s A

Kompletní seznam predikátů >>>


Program 1 - Rodina

rodic(vojtech, hana).
rodic(anezka, hana).
rodic(karel, ondrej).
rodic(karel, jitka).
rodic(hana, ondrej).
rodic(hana, jitka).
rodic(ondrej, eliska).
rodic(lucka, eliska).

muz(vojtech).
muz(karel).
muz(ondrej).
zena(anezka).
zena(hana).
zena(jitka).
zena(lucka).
zena(eliska).

slechtic(anezka).

otec(X,Y):- rodic(X,Y), muz(X).
matka(X,Y):-rodic(X,Y), zena(X).

stáhnout

Úkoly:


Program 2 - Dům

ma(dum,dvere).
ma(dum,okno).
ma(dum,komin).

rozbite(okno).
rozbite(komin).

stáhnout

Úkoly:


Program 3 - Násobení čísel

cifra(0).
cifra(1).
cifra(2).
cifra(3).
cifra(4).
cifra(5).
cifra(6).
cifra(7).
cifra(8).
cifra(9).

cislo(X):-cifra(X).

nsb(X,Y,V) :- cislo(X), cislo(Y), V is X*Y.

stáhnout

Úkoly:


Program 4 - Cesta v grafu

hrana(1, 4).
hrana(1, 5).
hrana(2, 1).
hrana(2, 4).
hrana(3, 1).
hrana(3, 2).
hrana(3, 4).
hrana(4, 5).

stáhnout

Úkoly:





  Zpět  

Poslední změna: 17. 2. 2004
Josef Steinberger