logo

Programi Prolog

Uporaba vgrajenih predikatov, zaporedja ciljev ali navedba cilja v sistemskem pozivu bi sama po sebi imela malo vrednosti. Za pisanje programa Prolog mora uporabnik najprej napisati program, ki je napisan v jeziku Prolog, naložiti ta program in nato ob pozivu določiti zaporedje enega ali več ciljev.

Če želite ustvariti program v Prologu, je preprost način, da ga vnesete v urejevalnik besedila in nato shranite kot besedilno datoteko, npr. prolog1.pl .

Naslednji primer prikazuje preprost program Prolog. Program vsebuje tri komponente, ki so znane kot klavzule. Vsak stavek se zaključi s piko.

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

Uporaba vgrajenega predikata ' posvetovati se' , lahko zgornji program naložite v sistem Prolog.

?-consult('prolog1.pl').

To kaže, da datoteka prolog1.pl obstaja in da je program prolog sistemsko pravilen, kar pomeni, da ima veljavne klavzule, da bo cilj uspel in da potrdi, da je bil program pravilno prebran, ustvari eno ali več vrstic izhoda. npr.

?-
# 0,00 sekunde za ogled prolog1.pl
?-

okrogla matematika java

Alternativa 'consult' je 'Load', ki bo na voljo v meniju, če ima sistem Prolog grafični uporabniški vmesnik.

Ko je program naložen, bo klavzula postavljena v pomnilniško območje, to pomnilniško območje pa je znano kot zbirka podatkov Prolog. V odgovor na sistemski poziv določite zaporedje ciljev, kar bo povzročilo, da bo Prolog poiskal in uporabil člene, potrebne za ovrednotenje ciljev.

Terminologija

V naslednjem programu tri vrstice prikazujejo klavzule.

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

S piko bo vsaka klavzula zaključena. Programi Prolog imajo zaporedje stavkov. Te klavzule opisujejo dejstva ali pravila.

Primer za dejstva je pes (rotvajler) in mačka (munchkin) . To pomenijo ' rotvajler je pes' in ' munchkin je mačka'.

Pes se imenuje predikat. Pes vsebuje en argument. Beseda ' rotvajler' v oklepaju ( ). Rottweiler se imenuje atom.

Primer pravila je zadnja vrstica programa.

 animal(A) :- dog(A). 

Dvopičje (:-) bo prebrano kot 'če'. Tu je A spremenljivka in predstavlja poljubno vrednost. Na naraven način lahko pravilo beremo kot 'Če je A žival, potem je A pes'.

Zgornja klavzula kaže, da je rotvajler je žival. Takšen odbitek lahko naredi tudi Prolog:

?- žival (rotvajler).
ja

Da namigujejo na to munchkin je žival, za to ni nobenih dokazov.

?- žival (munchkin).
št

Več terminologije

Vrednotenje ciljnega izraza določa, ali je izpolnjen ali ne. Pomeni tudi, da se cilj oceni kot res ali napačno.

Upoštevajte, da ko uporabnik vnese cilj, ga je včasih mogoče interpretirati kot ukaz. na primer

?- ustavi se. 'Uporablja se za izhod iz sistema Prolog.'

Včasih se lahko obravnava kot vprašanje, kot je,

?- žival (rotvajler). & 'Je rottweiler žival?'

Naslednji program prikazuje še en primer o živalih. Vsebuje osem členov. Komentar je prikazan z vsem besedilom med /* in */.

 /* 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 pes in povedek mačka imata štiri stavčne člene. Predpostavimo, da je bil program shranjen v besedilni datoteki 'animal.pl', rezultat pa je ustvarjen z nalaganjem programa in v sistemski poziv vnašamo zaporedje ciljev, kot sledi:

?- posvet ('animals1.pl'). Sistemski poziv
# 0,01 sekunde za posvet živali.pl animals.pl naložen z uporabo posveta

?- pes (rotvajler).
ja

?- pes (bokser).
št

?- pes (A).
A = rottweiler začasno ustavi - uporabnik pritisne povratno tipko

?- pes (B).
B = rottweiler; premore? uporabniške stiskalnice ;
B = pudelj; premore? uporabniške stiskalnice ;
B = buldog; premore? uporabniške stiskalnice ;
B = dobermann Brez pavze ? Šlo bo v naslednjo vrstico

?- mačka (A). A = sfinga; pavza ? uporabniške stiskalnice;
A = Bengalske pavze? uporabnik pritisne return

?- poslušanje (pes). Navedel bo vse klavzule, ki definirajo predikat pes

/* pes/1 */

pes (rotvajler).
pes (pudelj).
pes (buldog).
pes (doberman).
ja
?-

V tem primeru so predstavljene različne nove funkcije Prologa. Poizvedba je naslednja:

?- pes (A).

To pomeni, da poiščete vrednost A in to bo ime psa. Odgovor Prologa je naslednji:

A = rottweiler

Drugi možni odgovori A so naslednji: pudelj, buldog, doberman. To bo povzročilo premor v Prologu in zaradi tega moramo počakati, da uporabnik pritisne tipko 'return', preden prikaže sistemski poziv ?-.

Naslednjo poizvedbo lahko vnesemo na naslednji način:

?- pes (B).

Ta poizvedba je enaka prejšnji. Zgornja poizvedba pomeni, da 'poiščite vrednost B in to bo ime psa'. Odgovor Prologa je naslednji:

B = rottweiler

algoritem kabine

Prolog se bo znova zaustavil. Tokrat uporabnik pritisne tipko podpičje (;). Zdaj bo Prolog poiskal alternativno vrednost B, ki izpolnjuje ciljni pes (B). Odgovoril bo takole:

B = pudelj

Prolog se bo znova zaustavil. Uporabnik ponovno pritisne tipko podpičje (;). Prolog ustvari nadaljnjo rešitev, kot sledi:

B = buldog

Prolog se bo znova zaustavil. Uporabnik ponovno pritisne tipko podpičje (;). Prolog ustvari nadaljnjo rešitev, kot sledi:

B = doberman

Prolog prepozna, da ni več razpoložljive rešitve, tako da se ne ustavi, ampak sistemski poziv ?- tako, da takoj preide na izhod.

V tem primeru je predstavljen nov vgrajeni predikat. Določanje cilja

?- seznam (pes)

V zgornjem cilju bo Prolog naštel vse štiri klavzule, ki definirajo predikat pes. Določili jih bodo v enakem vrstnem redu, kot so jih naložili v bazo podatkov.

Uporaba spremenljivk v poizvedbi je prikazana v naslednjem primeru. Zaporedje cilja je naslednje:

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

Tako bomo dobili vse možne kombinacije mačke in psa.

?-mačka(A),pes(B).
A = sfinga,
B = rottweiler;

A = sfinga,
B = pudelj;

A = sfinga,
B = buldog;

A = sfinga,
B = doberman;

itd.

V nasprotju s tem je zaporedje cilja naslednje:

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

To bo dalo vse živali, ki so hkrati mačka in pes (v podatkovni bazi ni te živali). Tukaj je A 'katera koli vrednost' tako v cat(A) kot dog(A), vendar morata imeti oba enako vrednost.

?-mačka(A),pes(A).
št

java konec za zanko