logo

Programy Prolog

Použití vestavěných predikátů, posloupnosti cílů nebo zadání cíle na výzvu systému by samo o sobě mělo malou hodnotu. Aby mohl uživatel napsat program Prolog, musí nejprve napsat program, který je napsán v jazyce Prolog, načíst tento program a poté na výzvu specifikovat sekvenci jednoho nebo více cílů.

Chcete-li vytvořit program v Prologu, jednoduchým způsobem je napsat jej do textového editoru a poté jej uložit jako textový soubor jako prolog1.pl .

Následující příklad ukazuje jednoduchý program Prolog. Program obsahuje tři komponenty, které jsou známé jako klauzule. Každá věta je ukončena tečkou.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Použití vestavěného predikátu ' konzultovat' , výše uvedený program lze načíst do systému Prolog.

?-consult('prolog1.pl').

To ukazuje, že soubor prolog1.pl existuje a program prolog je systémově správný, což znamená, že má platné klauzule, cíl bude úspěšný a pro potvrzení, že byl program správně přečten, vytvoří jeden nebo více řádků výstupu. např.,

?-
# 0,00 sekund pro zobrazení prolog1.pl
?-

polymorfismus java

Alternativou 'konzultovat' je 'Načíst', které bude existovat v nabídce, pokud má systém Prolog grafické uživatelské rozhraní.

Když je program načten, klauzule bude umístěna do úložného prostoru a tento úložný prostor je známý jako databáze Prolog. V reakci na výzvu systému zadejte posloupnost cílů a to způsobí, že Prolog vyhledá a použije klauzule nezbytné k vyhodnocení cílů.

Terminologie

V následujícím programu tři řádky zobrazují klauzule.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

Pomocí tečky bude každá doložka ukončena. Programy Prolog mají posloupnost klauzulí. Fakta nebo pravidla jsou popsána těmito klauzulemi.

Příklad fakta je pes (rotvajler) a kočka (munchkin) . Mají na mysli, že' rotvajler je pes“ a „ munchkin je kočka'.

Pes se nazývá predikát. Pes obsahuje jeden argument. slovo ' rotvajler' uzavřeno v závorce ( ). Rotvajler se nazývá atom.

Příklad pravidla je poslední řádek programu.

 animal(A) :- dog(A). 

Dvojtečka(:-) se bude číst jako 'if'. Zde je A proměnná a představuje jakoukoli hodnotu. Přirozeným způsobem lze pravidlo číst jako „Pokud je A zvíře, pak je A pes“.

Výše uvedená klauzule ukazuje, že rotvajler je zvíře. Takový odpočet může také provést Prolog:

?- zvíře (rotvajler).
Ano

Abych to naznačil munchkin je zvíře, neexistuje o tom žádný důkaz.

?- zvíře (munchkin).
Ne

Více terminologie

Vyhodnocení cílového termínu určuje, zda je či není splněn. To také znamená, že cíl je vyhodnocen jako pravdivý nebo nepravdivý.

Všimněte si, že když uživatel zadá cíl, někdy to může být interpretováno jako příkaz. Například,

?- Stůj. 'Slouží k opuštění systému Prolog.'

Někdy se to dá považovat za otázku,

?- zvíře (rotvajler). & 'Je rotvajler zvíře?'

Následující program ukazuje další příklad o zvířatech. Obsahuje osm klauzulí. Komentář je zobrazen celým textem mezi /* a */.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

Predikát pes a predikát kočka mají čtyři věty. Předpokládejme, že v textovém souboru 'animal.pl' byl program uložen a výstup je generován načtením programu a na výzvu systému zadáváme sled cílů takto:

?- consult('animals1.pl'). Systémová výzva
# 0,01 sekund na konzultaci animals.pl animals.pl načteno pomocí konzultace

?- pes (rotvajler).
Ano

?- pes (boxer).
Ne

?- pes (A).
A = rottweiler pauzy – tlačítko návratu je stisknuto uživatelem

?- pes (B).
B = rotvajler; pauzy? uživatelské lisy ;
B = pudl; pauzy? uživatelské lisy ;
B = buldok; pauzy? uživatelské lisy ;
B = dobrman Žádná pauza ? Přejde na další řádek

a- kat(A). A = sfinga; pauza? uživatelské lisy;
A = Bengálské pauzy? uživatel stiskne návrat

?- poslech (pes). Zobrazí seznam všech vět, které definují predikát pes

/* pes/1 */

pes (rotvajler).
pes (pudl).
pes (buldok).
pes (dobermann).
Ano
?-

V tomto příkladu jsou představeny různé nové funkce Prologu. Dotaz je následující:

?- pes (A).

To znamená, že najděte hodnotu A a bude to jméno psa. Odpověď Prologu je následující:

A = rotvajler

Další možné odpovědi A jsou následující, pudl, buldok, dobrman. Způsobí to pauzu Prologu a kvůli tomu musíme počkat, až uživatel stiskne klávesu 'return', než vypíše systémovou výzvu ?-.

Další dotaz můžeme zadat následovně:

?- pes (B).

Tento dotaz je stejný jako předtím. Výše uvedený dotaz znamená, že „najděte hodnotu B a bude to jméno psa“. Odpověď Prologu je následující:

B = rotvajler

chytit a vyzkoušet javu

Prolog se opět pozastaví. Tento časový středník (;) je stisknut uživatelem. Nyní Prolog najde alternativní hodnotu B, která splňuje cíl pes(B). Odpoví následovně:

B = pudl

Prolog se opět pozastaví. Uživatel znovu stiskne klávesu středník (;). Prolog vytváří další řešení takto:

B = buldok

Prolog se opět pozastaví. Uživatel znovu stiskne klávesu středník (;). Prolog vytváří další řešení takto:

B = dobrman

Prolog rozpozná, že již není dostupné řešení tím, že se nezastaví, ale systém vyzve ?- tím, že okamžitě přejde na výstup.

V tomto příkladu je představen nový vestavěný predikát. Upřesnění cíle

?- výpis (pes)

Ve výše uvedeném cíli Prolog vypíše všechny čtyři klauzule, které definují predikát pes. Budou definovat ve stejném pořadí, v jakém byly načteny do databáze.

Použití proměnných v dotazu ukazuje následující příklad. Posloupnost cílů je následující:

linux $home

a-kočka (A), pes (B).

Tím získáme všechny možné kombinace kočky a psa.

a-kočka (A), pes (B).
A = sfinga,
B = rotvajler;

A = sfinga,
B = pudl;

A = sfinga,
B = buldok;

A = sfinga,
B = dobrman;

atd.

Naproti tomu sled cílů je následující:

?-kočka(A), pes(A).

Tím získáte všechna zvířata, která jsou jak kočka, tak pes (v databázi žádné takové zvíře není). Zde A je 'jakákoli hodnota' v kočce (A) i psovi (A), ale obě musí mít stejnou hodnotu.

?-kočka(A),pes(A).
Ne