logo

Prolog programmas

Izmantojot iebūvētos predikātus, mērķu secībai vai mērķa norādīšanai sistēmas uzvednē būtu maza vērtība. Lai uzrakstītu Prolog programmu, pirmkārt, lietotājam ir jāraksta programma, kas ir rakstīta Prolog valodā, jāielādē šī programma un pēc tam uzvednē jānorāda viena vai vairāku mērķu secība.

Lai programmā Prolog izveidotu programmu, vienkāršs veids ir ierakstīt to teksta redaktorā un pēc tam saglabāt kā teksta failu, piemēram, prolog1.pl .

Nākamajā piemērā ir parādīta vienkārša Prolog programma. Programmā ir trīs komponenti, kas ir pazīstami kā klauzulas. Katra klauzula tiek pārtraukta, izmantojot punktu.

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

Izmantojot iebūvēto predikātu ' konsultēties' , iepriekš minēto programmu var ielādēt Prolog sistēmā.

?-consult('prolog1.pl').

Tas parāda, ka fails prolog1.pl pastāv un prolog programma ir sistēmiski pareiza, kas nozīmē, ka tai ir derīgas klauzulas, mērķis būs veiksmīgs, un, lai apstiprinātu, ka programma ir pareizi nolasīta, tā izveido vienu vai vairākas izvades rindas. piem.,

?-
# 0,00 sekundes, lai konsultētos ar prolog1.pl
?-

reaģēt-tabula

“Konsultēt” alternatīva ir “Ielādēt”, kas pastāvēs izvēlnes opcijā, ja Prolog sistēmai ir grafiskais lietotāja interfeiss.

Kad programma tiek ielādēta, klauzula tiks ievietota krātuves apgabalā, un šī krātuves apgabals ir pazīstams kā Prolog datu bāze. Atbildot uz sistēmas uzvedni, norādiet mērķu secību, un tas liks Prolog meklēt un izmantot klauzulas, kas nepieciešamas mērķu novērtēšanai.

Terminoloģija

Nākamajā programmā trīs rindiņas parāda klauzulas.

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

Izmantojot punktu, katra klauzula tiks pārtraukta. Prolog programmām ir klauzulu secība. Fakti vai noteikumi ir aprakstīti šajos pantos.

Piemērs faktus ir suns (rotveilers) un kaķis (munchkin) . Viņi domā, ka' rotveilers ir suns' un' munchkin ir kaķis'.

Suni sauc par predikātu. Suns satur vienu argumentu. vārds ' rotveilers iekavās ( ). Rotveileru sauc par atomu.

Noteikuma piemērs ir programmas pēdējā rinda.

 animal(A) :- dog(A). 

Kols (:-) tiks nolasīts kā “if”. Šeit A ir mainīgais, un tas apzīmē jebkuru vērtību. Dabiskā veidā noteikumu var lasīt šādi: “Ja A ir dzīvnieks, tad A ir suns”.

Iepriekš minētā klauzula parāda, ka rotveilers ir dzīvnieks. Šādu atskaitījumu var veikt arī Prolog:

?- dzīvnieks (rotveilers).

Lai to norādītu munchkin ir dzīvnieks, par to nekas neliecina.

?- dzīvnieks (munchkin).

Vairāk terminoloģijas

Mērķa termiņa novērtēšana nosaka, vai tas ir izpildīts. Tas arī nozīmē, ka mērķis tiek novērtēts kā patiess vai nepatiess.

Ņemiet vērā: kad lietotājs ievada mērķi, dažreiz to var interpretēt kā komandu. Piemēram,

?- apstājies. 'To izmanto, lai izietu no Prolog sistēmas.'

Dažreiz to var uzskatīt par tādu jautājumu kā

?- dzīvnieks (rotveilers). & 'Vai rotveilers ir dzīvnieks?'

Nākamajā programmā parādīts vēl viens piemērs par dzīvniekiem. Tajā ir astoņas klauzulas. Komentārs tiek parādīts ar visu tekstu starp /* un */.

 /* 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.*/ 

Predikatīvajam sunim un predikatīvajam kaķim ir četras klauzulas. Pieņemsim, ka teksta failā “animal.pl” programma ir saglabāta un izvade tiek ģenerēta, ielādējot programmu, un pēc sistēmas uzvednes mēs ievadām šādu mērķu secību:

?- konsultējieties ('animals1.pl'). Sistēmas uzvedne
# 0,01 sekunde, lai apspriestu dzīvniekus.pl animals.pl, kas ielādēts, izmantojot konsultāciju

?- suns (rotveilers).

?- suns (bokseris).

?- suns(A).
A = rotveilera pauzes - lietotājs nospiež atgriešanas taustiņu

?- suns(B).
B = rotveilers; pauzes? lietotāja preses ;
B = pūdelis; pauzes? lietotāja preses ;
B = buldogs; pauzes? lietotāja preses ;
B = dobermanis Nav pauzes? Tas pāries uz nākamo rindu

?- kaķis(A). A = sfinksa; pauze ? lietotāja preses;
A = Bengālijas pauzes? lietotājs nospiež atpakaļ

?- klausās(suns). Tajā būs uzskaitītas visas klauzulas, kas definē predikātu suni

/* suns/1 */

suns (rotveilers).
suns (pūdelis).
suns (buldogs).
suns (dobermanis).

?-

Šajā piemērā ir ieviestas dažādas jaunas Prolog iespējas. Vaicājums ir šāds:

?- suns(A).

Tas nozīmē, ka atrodiet A vērtību, un tas būs suņa vārds. Prolog atbilde ir šāda:

A = rotveilers

Citas iespējamās A atbildes ir šādas: pūdelis, buldogs, dobermanis. Tas izraisīs Prolog pauzi, un tādēļ mums ir jāgaida, līdz lietotājs nospiež taustiņu 'Return', pirms tas izvadīs sistēmas uzvedni ?-.

Nākamo vaicājumu varam ievadīt šādi:

?- suns(B).

Šis vaicājums ir tāds pats kā iepriekš. Iepriekš minētais vaicājums nozīmē, ka 'atrodiet B vērtību, un tas būs suņa vārds'. Prolog atbilde ir šāda:

B = rotveilers

java burbuļu kārtošana

Prolog atkal apstāsies. Šoreiz lietotājs nospiež semikola (;) taustiņu. Tagad Prolog atradīs alternatīvu B vērtību, kas apmierina mērķa suni (B). Tā atbildēs šādi:

B = pūdelis

Prolog atkal apstāsies. Lietotājs vēlreiz nospiež semikola (;) taustiņu. Prolog izstrādā šādu risinājumu:

B = buldogs

Prolog atkal apstāsies. Lietotājs vēlreiz nospiež semikola (;) taustiņu. Prolog izstrādā šādu risinājumu:

Charat virknē

B = dobermanis

Prolog atzīst, ka vairs nav pieejams risinājums, neapturot, bet sistēma uzvednē ?- nekavējoties pārejot uz izvadi.

Šajā piemērā ir ieviests jauns iebūvēts predikāts. Mērķa precizēšana

?- saraksts (suns)

Iepriekš minētajā mērķī Prolog uzskaitīs visas četras klauzulas, kas definē predikātu suni. Tie tiks definēti tādā pašā secībā, kādā tie tika ielādēti datu bāzē.

Mainīgo lietojums vaicājumā ir parādīts nākamajā piemērā. Mērķa secība ir šāda:

?-kaķis (A), suns (B).

Tas mums dos visas iespējamās kaķa un suņa kombinācijas.

?-kaķis (A), suns (B).
A = sfinksa,
B = rotveilers;

A = sfinksa,
B = pūdelis;

A = sfinksa,
B = buldogs;

A = sfinksa,
B = dobermanis;

utt.

Turpretim mērķa secība ir šāda:

?-kaķis(A), suns(A).

Tas iegūs visus dzīvniekus, kas ir gan kaķis, gan suns (datubāzē šāda dzīvnieka nav). Šeit A ir “jebkura vērtība” gan kaķim (A), gan sunim (A), taču abiem ir jābūt vienādai vērtībai.

?-kaķis (A), suns (A).