====== JUI - 8. cvičení - Prolog ======
prolog - uvod
reprezentant logickeho programovani
* relace
* unarni - mnozina
* binarni - mnozina dvojic
* ternrni - mnozina trojic
* atom - male pocatecni pismeno
* promenna - velke pocatecni pismeno
* klausule (znamena relaci) - je zakoncena teckou
* fakta
* pravidlo
* ; logicke or
* , logicke and
%unarni relace
muz (petr).
muz (pavel).
zena (Eva).
%pozor, musi byt hned za sebou, jinak se prepisou
?- muz (petr).
yes
?- muz (eva).
no
?- muz(X).
X = petr ;
X = pavel
% //komentar
% predek(?Pred, ?Pot)
% ? oboji, - vystupni, + vstupni
+
=:= rovnost
=\= nerovnost
>
<
=<
>=
prirazeni
promenna is vyraz
X is 1 + 2
muz(pavel).
muz(petr).
zena(iva).
zena(eva).
manzele(petr,eva).
manzele(pavel,iva).
manzele(karel,marie).
rodic(petr,josef).
rodic(eva,josef).
rodic(pavel,karel).
rodic(iva,karel).
rodic(karel,petrik).
deda(D,V) :- otec(D,X), rodic(X,V).
tchyne(B,O) :- zena(B), rodic(B,X), manzele(O,X).
tchyne(B,O) :- zena(B), rodic(B,X), manzele(X,O).
predek(P,O) :- rodic(P,O).
predek(P,O) :- rodic(P,X), predek(X,O).
vzdalenost(P,O,V) :- rodic(P,O), V is 1.
%alternativne vzdalenost(P,O,1) := rodic(P,O).
vzdalenost(P,O,V) :- rodic(P,X), vzdalenost(X,O,W), V is W + 1.
% abs (+C,-Vysl)
abs(C,Vysl) :- C >= 0, Vysl is C; Vysl is -C.
% fact (+C, -Vysl)
fact(0,1).
fact(C,V) :- C1 is C - 1, fact(C1,M), V is M *C.
rez - zabranuje backtrackingu skrze rez
cykly -
repeat, c1, c2, ... , cn , fail. %nekonecne-krat se opakuje
vstup:- repeat,
write ('Zadej cislo:'),
read (N),
integer(N),
N < 100,
!.
seznamy