Logika a logické programování – cvičení Prolog

Seznámení s prostředím

SWI Prolog, najdete ho v menu START

Postup

Příklady

Do nově otevřeného souboru (v Prologu FILE – NEW) zapíšeme tyto řádky (každý příkaz na novém řádku):
pritel(jana,hana).   %(Jana je přítelem Hany). ......
pritel(honza,jana).
pritel(jana,pavel).

Uložíme a načteme (File - Consult). Pak v okně konzoly postupně zadáváme dotazy:
Je Honza přítelem Jany? pritel(honza,jana). (odpověď by měla být YES).
Kdo je přítelem Hany? pritel(X,hana).
Čí přítel je Jana? pritel(jana,X). (po první odpovědi stiskneme středník, Prolog pokračuje).
Kdo je čí přítel? pritel(X,Y). (také stiskneme středník po každé odpovědi).
Kdo je něčí přítel? pritel(X,_). (pro hodnotu, která nás nezajímá, použijeme anonymní proměnnou, tedy podtržítko).
Je někdo něčí přítel? pritel(_,_). (odpověď by měla být pouze YES, tedy „Je možno za tyto parametry něco dosadit).
Kdo je přítelem Hany a Pavla?
(konjunkce v antecedentu).
pritel(X,hana),pritel(X,pavel).

Přidáme do báze (do téhož souboru, můžeme oddělit prázdným řádkem) tato pravidla a fakty:

Když má 4 nebo 6 nohou, je to zvíře.
Když má dvě nohy a křídla, je to pták.
Člověk má 2 nohy, vlaštovka má 2 nohy a křídla.
Lev i ovce mají 4 nohy.
Ovce je matkou jehněte.
Potomek má stejný počet nohou jako jeho matka. (použijeme pouze predikáty ma_nohou a matka).

zvire(X):-ma_nohou(X,4).
zvire(X):-ma_nohou(X,6).
ptak(X):-
     ma_nohou(X,2),ma_kridla(X).
ma_nohou(clovek,2).
ma_nohou(vlastovka,2).
ma_kridla(vlastovka).
ma_nohou(lev,4).
ma_nohou(ovce,4).
matka(ovce,jehne).
ma_nohou(X,Pocet):-
     matka(Y,X),ma_nohou(Y,Pocet).

Uložíme, načteme do Prologu a v konzole zadáváme dotazy:
Je lev zvíře? zvire(lev).
Je vlaštovka pták? ptak(vlastovka).
Je člověk pták? ptak(clovek).
Kolik nohou má jehně? ma_nohou(jehne,X).
Je jehně zvíře? zvire(jehne).
Vypiš všechna zvířata. zvire(X).
Kolik nohou mají jednotlivá zvířata? zvire(X),ma_nohou(X,Y).


Prolog přejímá nástroje klauzulární logiky a dále obsahuje spoustu věcí navíc, aby jeho výpočetní síla byla obdobná jako je výpočetní síla jiných programovacích jazyků. Jsou to například možnosti práce se vstupy a výstupy (včetně souborů a dialogových oken), matematické funkce atd. Důležitým prvkem obsaženým v Prologu jsou seznamy, které umožňují naprogramovat algoritmy výběru, řazení, shromažďování hodnot atd.