logo

Prolog programmer

Brug af de indbyggede prædikater, rækkefølgen af ​​mål eller angivelse af et mål ved systemprompten ville være af ringe værdi i sig selv. For at skrive et Prolog-program skal brugeren for det første skrive et program, som er skrevet på Prolog-sproget, indlæse det program og derefter angive en sekvens af et eller flere mål ved prompten.

For at oprette et program i Prolog er den enkle måde at skrive det ind i teksteditoren og derefter gemme det som en tekstfil som f.eks. prolog1.pl .

Følgende eksempel viser et simpelt program af Prolog. Programmet indeholder tre komponenter, som er kendt som klausuler. Hver klausul afsluttes med et punktum.

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

Brug af det indbyggede prædikat ' konsultere' , kan ovenstående program indlæses i Prolog-systemet.

?-consult('prolog1.pl').

Dette viser, at prolog1.pl-filen eksisterer, og prolog-programmet er systemisk korrekt, hvilket betyder, at det har gyldige klausuler, målet vil lykkes, og for at bekræfte, at programmet er blevet korrekt læst, producerer det en eller flere outputlinjer. f.eks.,

?-
# 0,00 sekunder at konsultere prolog1.pl
?-

streng.format

Alternativet til 'consult' er 'Load', som vil eksistere på menupunktet, hvis Prolog-systemet har en grafisk brugergrænseflade.

Når programmet er indlæst, vil klausulen blive placeret i et lagerområde, og dette lagerområde er kendt som Prolog-databasen. Som svar på systemprompten skal du angive en sekvens af mål, og det vil få Prolog til at søge efter og bruge de nødvendige klausuler til at evaluere målene.

Terminologi

I det følgende program viser tre linjer sætningerne.

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

Ved at bruge punktum vil hver klausul blive afsluttet. Prolog-programmer har en række klausuler. Fakta eller regler er beskrevet i disse klausuler.

Eksempel på fakta er hund (rottweiler) og kat (munchkin) . De mener at ' rottweiler er en hund' og ' munchkin er en kat'.

Hund kaldes et prædikat. Hund indeholder et argument. Ord ' rottweiler' omgivet af parentes( ). Rottweiler kaldes et atom.

Eksemplet på regel er den sidste linje i programmet.

 animal(A) :- dog(A). 

Kolon(:-)-tegnet vil blive læst som 'hvis'. Her er A en variabel, og den repræsenterer enhver værdi. På en naturlig måde kan reglen læses som 'Hvis A er et dyr, så er A en hund'.

Ovenstående klausul viser, at rottweiler er et dyr. Sådanne fradrag kan også foretages af Prolog:

?- dyr (rottweiler).
Ja

For at antyde det munchkin er et dyr, er der ingen beviser for dette.

?- dyr (munchkin).
Ingen

Mere terminologi

Evaluering af et målbegreb afgør, om det er opfyldt eller ej. Det betyder også, at målet vurderes til at være sandt eller falsk.

Bemærk, at når en bruger indtaster et mål, kan det nogle gange tolkes som en kommando. For eksempel,

?- standse. 'Det bruges til at afslutte Prolog-systemet.'

Nogle gange kan det betragtes som et spørgsmål som,

?- dyr (rottweiler). & 'Er rottweiler et dyr?'

Det følgende program viser endnu et eksempel om dyr. Den består af otte klausuler. Kommentaren vises af al teksten mellem /* og */.

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

Prædikatet hund og prædikatet kat har begge fire klausuler. Antag, at programmet i en tekstfil 'animal.pl' er blevet gemt, og output genereres ved at indlæse programmet, og ved systemprompten indtaster vi en sekvens af mål som følger:

?- consult('animals1.pl'). Systemprompt
# 0,01 sekunder til at konsultere animals.pl animals.pl indlæst ved hjælp af consult

?- hund (rottweiler).
Ja

?- hund(bokser).
Ingen

?- hund(A).
A = rottweiler pauser - returtasten trykkes af brugeren

?- hund(B).
B = rottweiler; pauser? bruger trykker på ;
B = puddel; pauser? bruger trykker på ;
B = bulldog; pauser? bruger trykker på ;
B = dobermann Ingen pause? Det går videre til næste linje

?- kat(A). A = sfinx; pause? brugerpresser;
A = Bengal pauser? bruger trykker retur

?- lytter(hund). Den vil liste alle de klausuler, der definerer prædikathund

/* hund/1 */

hund (rottweiler).
hund (puddel).
hund (bulldog).
hund (dobermann).
Ja
?-

I dette eksempel introduceres forskellige nye funktioner i Prolog. Forespørgslen er som følger:

?- hund(A).

Det betyder at finde A's værdi, og det vil være navnet på hunden. Prologs svar er som følger:

A = rottweiler

Andre mulige svar på A er som følger, puddel, bulldog, dobermann. Det vil forårsage Prolog-pausen, og på grund af dette skal vi vente på, at brugeren trykker på 'retur'-tasten, før den udsender systemprompten ?-.

Vi kan indtaste den næste forespørgsel som følger:

?- hund(B).

Denne forespørgsel er den samme som før. Ovenstående forespørgsel betyder, at 'find B'ets værdi, og det vil være navnet på en hund'. Prologs svar er som følger:

B = rottweiler

eksempel på java-kort

Prolog stopper igen. Denne gang trykkes semikolon (;) tasten af ​​brugeren. Nu vil Prolog finde en alternativ værdi af B, der opfylder målhunden(B). Den vil svare som følger:

B = puddel

Prolog stopper igen. Semikolon-tasten (;) trykkes igen af ​​brugeren. Prolog producerer en yderligere løsning som følger:

B = bulldog

Prolog stopper igen. Semikolon-tasten (;) trykkes igen af ​​brugeren. Prolog producerer en yderligere løsning som følger:

B = dobermann

Prolog erkender, at der ikke er mere tilgængelig løsning ved ikke at sætte på pause, men systemet prompter ?- ved straks at gå videre til outputtet.

Et nyt indbygget prædikat introduceres i dette eksempel. Angivelse af målet

?- liste (hund)

I ovenstående mål vil Prolog liste alle fire klausuler, som definerer prædikathunden. De vil definere i samme rækkefølge, som de blev indlæst i databasen.

Brugen af ​​variabler i forespørgslen er vist i følgende eksempel. Målsekvensen er som følger:

a-kat(A),hund(B).

Dette vil give os alle mulige kombinationer af en kat og en hund.

a-kat(A),hund(B).
A = sfinx,
B = rottweiler;

A = sfinx,
B = puddel;

A = sfinx,
B = bulldog;

A = sfinx,
B = dobermann;

etc.

I modsætning hertil er rækkefølgen af ​​mål som følger:

a-kat(A), hund(A).

Linux gratis ipconfig

Dette vil give alle dyr, der er både en kat og en hund (i databasen er der ikke et sådant dyr). Her er A 'enhver værdi' i både kat(A) og hund(A), men begge skal have samme værdi.

a-kat(A),hund(A).
Ingen