Differences
This shows you the differences between two versions of the page.
— |
jui:cviko8 [2011/08/16 22:33] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== 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 | ||
+ | | ||
+ | <code prolog> | ||
+ | %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 | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | 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. | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | 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 | ||
+ | </code> |