====== 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 [[http://www.lpa.co.uk/|LPA Prolog]], který se nějak na škole oficiálně používá. Pro cvičení bude ale dostačující [[http://alice.unibo.it/xwiki/bin/view/Tuprolog/|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).\\