Table of Contents

Cvičení 13.12.2010

Závěrečným tématem bude Prolog, který bude díky reorganizaci náplně kurzu možné tento semestr i vyzkoušet na cvičení. Připomínám, že Prolog bude součástí 2. zápočtové písemky.

Ja jsem posílal, měli bychom použít LPA Prolog, který se nějak na škole oficiálně používá. Pro cvičení bude ale dostačující tuProlog, který je napsaný v Javě a tedy ho stačí jenom stáhnout a spustit.

Příklady

Vztahy

otec(cyril, adam).
matka(adam, bozena).
rodic(X, Y) :- matka(X, Y).
rodic(X, Y) :- otec(X, Y).
zena(X) :- matka(_, X).
muz(X) :- otec(_, X).
babicka(X, Y) :- matka(Z, Y), rodic(X, Z).

zna(jakub, tomas).
zna(tomas, jakub).
zna(tomas, becherovka).
clovek(jakub).
clovek(tomas).

Databaze

db_clovek(jakub, 2004, til).
db_clovek(tomas, 2010, ml).
db_clovek(honza, 2010, sp).
db_clovek(jan, 2007, ml).
db_clovek(petr, 1908, sp).
oblibeny_predmet(X, Y) :- db_clovek(X, _, Y).
clovek(X) :- db_clovek(X, _, _).
doba_na_skole(X, Y) :- db_clovek(X, Z, _), Y is 2010 - Z.
dele_na_skole_nez(X, Y) :- doba_na_skole(X, Z), Z > Y.
oblibeny_predmet_2010(X) :- db_clovek(_, 2010, X).

Aritmetika

soucet_2(X, Y, Z) :- Z is X + Y.
soucet_n(0, 0).
soucet_n(X, Y) :- X > 0, Z is X - 1, soucet_n(Z, V), Y is V + X.
faktorial(0, 1).
faktorial(X, Y) :- X > 0, Z is X - 1, faktorial(Z, V), Y is V * X.
abs_hodnota(X, Y) :- X >= 0, Y is X.
abs_hodnota(X, Y) :- X < 0, Y is -X.

Hledání cesty v grafu a seznamy

dalnice(nemecko, praha).
dalnice(praha, ostrava).
dalnice(praha, brno).
dalnice(brno, viden).
je_cesta_po_dalnici(X, Y) :- dalnice(X, Y).
je_cesta_po_dalnici(X, Z) :- dalnice(X, Y), je_cesta_po_dalnici(Y, Z).
cesta(X, X, []).
cesta(X, Y, [Z | L]) :- dalnice(X, Z), cesta(Z, Y, L).