====== 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