logo

Programy Prolog

Použitie vstavaných predikátov, postupnosti cieľov alebo zadanie cieľa na výzvu systému by malo samo osebe malú hodnotu. Ak chcete napísať program Prolog, používateľ musí najprv napísať program, ktorý je napísaný v jazyku Prolog, nahrať tento program a potom na výzvu špecifikovať postupnosť jedného alebo viacerých cieľov.

Ak chcete vytvoriť program v Prologu, jednoduchým spôsobom je napísať ho do textového editora a potom ho uložiť ako textový súbor prolog1.pl .

Nasledujúci príklad ukazuje jednoduchý program Prolog. Program obsahuje tri komponenty, ktoré sú známe ako klauzuly. Každá veta je ukončená bodkou.

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

Použitie vstavaného predikátu ' poradiť' , vyššie uvedený program je možné načítať do systému Prolog.

?-consult('prolog1.pl').

To ukazuje, že súbor prolog1.pl existuje a program prolog je systémovo správny, čo znamená, že má platné klauzuly, cieľ bude úspešný a na potvrdenie, že program bol správne prečítaný, vytvorí jeden alebo viac riadkov výstupu. napr.

?-
# 0,00 sekúnd na konzultáciu prolog1.pl
?-

testovanie kompatibility

Alternatívou 'consult' je 'Load', ktorá bude existovať v položke menu, ak má systém Prolog grafické užívateľské rozhranie.

Keď sa program načíta, klauzula sa umiestni do úložného priestoru a tento úložný priestor je známy ako databáza Prolog. V reakcii na výzvu systému špecifikujte postupnosť cieľov, čo spôsobí, že Prolog bude hľadať a používať klauzuly potrebné na vyhodnotenie cieľov.

Terminológia

V nasledujúcom programe tri riadky zobrazujú klauzuly.

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

Použitím bodky bude každá doložka ukončená. Programy Prolog majú postupnosť klauzúl. Fakty alebo pravidlá sú opísané v týchto doložkách.

Príklad faktov je pes (rotvajler) a mačka (munchkin) . Majú na mysli, že ' rotvajler je pes“ a „ munchkin je mačka'.

Pes sa nazýva predikát. Pes obsahuje jeden argument. slovo ' rotvajler' v zátvorke ( ). Rotvajler sa nazýva atóm.

Príklad pravidla je posledný riadok programu.

 animal(A) :- dog(A). 

Dvojbodka(:-) sa bude čítať ako „ak“. Tu je A premenná a predstavuje akúkoľvek hodnotu. Prirodzeným spôsobom možno pravidlo čítať ako „ak je A zviera, potom je A pes“.

Vyššie uvedená klauzula ukazuje, že rotvajler je zviera. Takýto odpočet môže vykonať aj Prolog:

?- zviera (rotvajler).
Áno

Naznačiť to munchkin je zviera, neexistujú o tom žiadne dôkazy.

?- zviera (munchkin).
Nie

Viac terminológie

Vyhodnotenie cieľového termínu určuje, či je alebo nie je splnený. Znamená to tiež, že cieľ sa vyhodnotí ako pravdivý alebo nepravdivý.

Všimnite si, že keď používateľ zadá cieľ, niekedy to môže byť interpretované ako príkaz. Napríklad,

? - zastaviť. 'Používa sa na opustenie systému Prolog.'

Niekedy to možno považovať za otázku,

?- zviera (rotvajler). & 'Je rotvajler zviera?'

Nasledujúci program ukazuje ďalší príklad o zvieratách. Obsahuje osem klauzúl. Komentár je zobrazený celým textom medzi /* 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 mačka majú štyri vety. Predpokladajme, že v textovom súbore 'animal.pl' bol program uložený a výstup je generovaný načítaním programu a na výzvu systému zadávame postupnosť cieľov nasledovne:

?- consult('animals1.pl'). Systémová výzva
# 0,01 sekundy na konzultáciu animals.pl animals.pl načítané pomocou konzultácie

?- pes (rotvajler).
Áno

?- pes (boxer).
Nie

- pes (A).
A = rottweiler pauzy - tlačidlo návratu stlačí užívateľ

?- pes (B).
B = rotvajler; pauzy ? užívateľské lisy ;
B = pudel; pauzy ? užívateľské lisy ;
B = buldog; pauzy ? užívateľské lisy ;
B = doberman Bez prestávky? Prejde na ďalší riadok

a- kat(A). A = sfinga; pauza ? užívateľské lisy;
A = Bengálske pauzy? užívateľ stlačí návrat

?- počúvanie (pes). Uvedie všetky vety, ktoré definujú predikát pes

/* pes/1 */

pes (rotvajler).
pes (pudlík).
pes (buldog).
pes (doberman).
Áno
?-

V tomto príklade sú predstavené rôzne nové funkcie Prologu. Dopyt je nasledovný:

- pes (A).

To znamená, že nájdite hodnotu A a bude to meno psa. Odpoveď Prologu je nasledovná:

A = rotvajler

Ďalšie možné odpovede A sú nasledovné, pudel, buldog, doberman. Spôsobí to pauzu v Prologu, a preto musíme počkať, kým používateľ stlačí klávesu 'návrat' predtým, ako sa zobrazí systémová výzva ?-.

Ďalší dotaz môžeme zadať takto:

?- pes (B).

Tento dotaz je rovnaký ako predtým. Vyššie uvedený dotaz znamená, že „nájdite hodnotu B a bude to meno psa“. Odpoveď Prologu je nasledovná:

B = rotvajler

pole reťazcov v programovaní v c

Prolog sa opäť pozastaví. Tento čas bodkočiarku (;) stlačí používateľ. Teraz Prolog nájde alternatívnu hodnotu B, ktorá spĺňa cieľ pes (B). Odpovie takto:

B = pudel

Prolog sa opäť pozastaví. Používateľ opäť stlačí tlačidlo bodkočiarka (;). Prolog vytvára ďalšie riešenie takto:

B = buldog

Prolog sa opäť pozastaví. Používateľ opäť stlačí tlačidlo bodkočiarka (;). Prolog vytvára ďalšie riešenie takto:

B = doberman

Prolog rozpozná, že už nie je dostupné riešenie tým, že nezastaví, ale systém vyzve ?- tým, že okamžite prejde na výstup.

V tomto príklade je predstavený nový vstavaný predikát. Určenie cieľa

?- výpis (pes)

Vo vyššie uvedenom cieli Prolog vypíše všetky štyri vety, ktoré definujú predikát pes. Definujú sa v rovnakom poradí, v akom boli načítané do databázy.

Použitie premenných v dotaze ukazuje nasledujúci príklad. Postupnosť cieľov je nasledovná:

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

Získame tak všetky možné kombinácie mačky a psa.

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

A = sfinga,
B = pudel;

A = sfinga,
B = buldog;

A = sfinga,
B = doberman;

atď.

zoznam triediť pole

Naproti tomu postupnosť cieľov je nasledovná:

a-mačka (A), pes (A).

Tým získate všetky zvieratá, ktoré sú mačkou aj psom (v databáze takéto zviera nie je). Tu je A „akákoľvek hodnota“ pre mačku (A) aj psa (A), ale obe musia mať rovnakú hodnotu.

a-mačka (A), pes (A).
Nie