logo

Prolog programi

Korištenje ugrađenih predikata, slijed ciljeva ili navođenje cilja na upitu sustava ne bi imalo veliku vrijednost samo po sebi. Da bi napisao Prolog program, prvo, korisnik mora napisati program koji je napisan u Prolog jeziku, učitati taj program, a zatim specificirati slijed jednog ili više ciljeva na upit.

Da biste kreirali program u Prologu, jednostavan način je da ga upišete u uređivač teksta i zatim spremite kao tekstualnu datoteku poput prolog1.pl .

Sljedeći primjer prikazuje jednostavan program Prologa. Program sadrži tri komponente, koje su poznate kao klauzule. Svaka rečenica završava se točkom.

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

Korištenje ugrađenog predikata ' savjetovati' , gornji program se može učitati u Prolog sustav.

?-consult('prolog1.pl').

Ovo pokazuje da datoteka prolog1.pl postoji i da je prolog program sistemski ispravan, što znači da ima valjane klauzule, da će cilj uspjeti i da potvrdi da je program ispravno pročitan, proizvodi jednu ili više linija izlaza. npr.

?-
# 0,00 sekundi za pregled prolog1.pl
?-

string u java metodama

Alternativa 'consult' je 'Load', koja će postojati u opciji izbornika ako sustav Prolog ima grafičko korisničko sučelje.

Kada se program učita, klauzula će biti smještena u područje pohrane, a to područje pohrane poznato je kao Prolog baza podataka. Kao odgovor na upit sustava, odredite slijed ciljeva i to će uzrokovati da Prolog traži i koristi klauzule potrebne za procjenu ciljeva.

Terminologija

U sljedećem programu tri retka prikazuju klauzule.

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

Korištenjem točke, svaka klauzula će biti prekinuta. Prolog programi imaju niz klauzula. Ovim klauzulama opisuju se činjenice ili pravila.

Primjer za činjenice je pas (rotvajler) i mačka (munchkin) . Oni misle da ' rotvajler je pas' i ' munchkin je mačka'.

Pas se zove predikat. Pas sadrži jedan argument. Riječ ' rotvajler' u zagradi ( ). Rottweiler se zove atom.

Primjer pravila je posljednji redak programa.

 animal(A) :- dog(A). 

Znak dvotočke (:-) čitat će se kao 'ako'. Ovdje je A varijabla i predstavlja bilo koju vrijednost. Na prirodan način, pravilo se može čitati kao 'Ako je A životinja, onda je A pas'.

Gornja klauzula pokazuje da rotvajler je životinja. Takav odbitak također može napraviti Prolog:

?- životinja (rotvajler).
Da

Da to implicira munchkin je životinja, za to nema dokaza.

?- životinja (munchkin).
Ne

Više terminologije

Ocjenjivanje uvjeta cilja određuje je li on zadovoljen ili ne. To također znači da se cilj procjenjuje na istinito ili lažno.

Imajte na umu da kada korisnik unese cilj, ponekad se to može protumačiti kao naredba. Na primjer,

?- zaustaviti. 'Koristi se za izlaz iz Prolog sustava.'

Ponekad se to može smatrati pitanjem poput,

?- životinja (rotvajler). & 'Je li rottweiler životinja?'

Sljedeći program prikazuje još jedan primjer o životinjama. Sastoji se od osam klauzula. Komentar je prikazan cijelim tekstom između /* i */.

 /* 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 pas i predikat mačka imaju po četiri rečenice. Pretpostavimo da je u tekstualnoj datoteci 'animal.pl' program spremljen, a izlaz se generira učitavanjem programa i na odzivnik sustava unosimo niz ciljeva kako slijedi:

?- savjetovati se ('animals1.pl'). Upit sustava
# 0,01 sekunda za konzultaciju animals.pl animals.pl učitano korištenjem konzultacije

?- pas (rotvajler).
Da

?- pas (bokser).
Ne

?- pas(A).
A = rottweiler pauzira - korisnik pritisne povratnu tipku

?- pas(B).
B = rotvajler; pauze? korisnički preše ;
B = pudl; pauze? korisnički preše ;
B = buldog; pauze? korisnički preše ;
B = dobermann Bez pauze ? Ići će u sljedeći redak

?- mačka(A). A = sfinga; pauza ? korisnički preše;
A = Bengalske pauze? korisnik pritisne povratak

?- slušanje (pas). Navest će sve klauze koje definiraju predikat pas

/* pas/1 */

pas (rotvajler).
pas (pudla).
pas (buldog).
pas (dobermann).
Da
?-

U ovom primjeru uvode se razne nove značajke Prologa. Upit je sljedeći:

?- pas(A).

To znači da pronađite vrijednost A i to će biti ime psa. Odgovor Prologa je sljedeći:

A = rotvajler

Ostali mogući odgovori za A su sljedeći, pudl, buldog, doberman. To će uzrokovati pauzu Prologa i zbog toga moramo pričekati da korisnik pritisne tipku 'return' prije nego što se pojavi sistemski prompt ?-.

Sljedeći upit možemo unijeti na sljedeći način:

?- pas(B).

Ovaj upit je isti kao i prije. Gornji upit znači da 'pronađite vrijednost B i to će biti ime psa'. Odgovor Prologa je sljedeći:

B = rotvajler

bash čita datoteku

Prolog će se ponovno zaustaviti. Ovaj put korisnik pritisne tipku točka-zarez (;). Sada će Prolog pronaći alternativnu vrijednost B koja zadovoljava cilj psa(B). Odgovorit će na sljedeći način:

B = pudlica

Prolog će se ponovno zaustaviti. Korisnik ponovno pritisne tipku točka-zarez (;). Prolog proizvodi daljnje rješenje na sljedeći način:

B = buldog

Prolog će se ponovno zaustaviti. Korisnik ponovno pritisne tipku točka-zarez (;). Prolog proizvodi daljnje rješenje na sljedeći način:

B = doberman

Prolog prepoznaje da nema više dostupnog rješenja tako što ne pauzira, nego sistemski prompt ?- tako što odmah prelazi na izlaz.

U ovom primjeru uveden je novi ugrađeni predikat. Određivanje cilja

?- popis (pas)

U gornjem cilju, Prolog će navesti sve četiri rečenice koje definiraju predikat pas. Definirat će se istim redoslijedom kojim su učitani u bazu podataka.

Korištenje varijabli u upitu prikazano je sljedećim primjerom. Slijed cilja je sljedeći:

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

Time ćemo dobiti sve moguće kombinacije mačke i psa.

?-mačka(A),pas(B).
A = sfinga,
B = rotvajler;

A = sfinga,
B = pudl;

A = sfinga,
B = buldog;

A = sfinga,
B = doberman;

itd.

Nasuprot tome, slijed cilja je sljedeći:

line autocad naredba

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

Ovo će dati sve životinje koje su i mačka i pas (u bazi podataka ne postoji takva životinja). Ovdje je A 'bilo koja vrijednost' i u cat(A) i dog(A), ali oba moraju imati istu vrijednost.

?-mačka(A),pas(A).
Ne