logo

Prolog-ohjelmat

Sisäisiä predikaatteja käyttämällä tavoitteiden järjestys tai tavoitteen määrittäminen järjestelmäkehotteessa olisi sinänsä vähäistä arvoa. Kirjoittaakseen Prolog-ohjelman käyttäjän on ensinnäkin kirjoitettava Prolog-kielellä kirjoitettu ohjelma, ladattava kyseinen ohjelma ja määritettävä sitten kehotteessa yhden tai useamman tavoitteen sarja.

Ohjelman luomiseksi Prologissa yksinkertainen tapa on kirjoittaa se tekstieditoriin ja tallentaa se sitten tekstitiedostona, esim. prolog1.pl .

Seuraava esimerkki näyttää yksinkertaisen Prolog-ohjelman. Ohjelma sisältää kolme osaa, jotka tunnetaan lausekkeina. Jokainen lause päätetään pisteellä.

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

Käyttämällä sisäänrakennettua predikaattia ' neuvotella' , yllä oleva ohjelma voidaan ladata Prolog-järjestelmään.

?-consult('prolog1.pl').

Tämä osoittaa, että prolog1.pl-tiedosto on olemassa ja prolog-ohjelma on järjestelmällisesti oikea, mikä tarkoittaa, että siinä on kelvolliset lausekkeet, tavoite onnistuu ja varmistaakseen, että ohjelma on luettu oikein, se tuottaa yhden tai useamman rivin tulosteen. esim.,

?-
# 0,00 sekuntia konsultoida prolog1.pl
?-

java heitto poikkeus

Vaihtoehto 'konsultti' on 'Lataa', joka on valikkokohdassa, jos Prolog-järjestelmässä on graafinen käyttöliittymä.

Kun ohjelma ladataan, lauseke sijoitetaan tallennusalueelle, ja tämä tallennusalue tunnetaan nimellä Prolog-tietokanta. Vastauksena järjestelmän kehotteeseen määritä tavoitteiden sarja, jolloin Prolog etsii ja käyttää tavoitteiden arvioimiseen tarvittavia lausekkeita.

Terminologia

Seuraavassa ohjelmassa lauseet näkyvät kolmella rivillä.

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

Kun käytetään pistettä, jokainen lause päättyy. Prolog-ohjelmissa on lausesarja. Faktat tai säännöt kuvataan näissä lausekkeissa.

Esimerkki tosiasiat On koira (rottweiler) ja kissa (munchkin) . Ne tarkoittavat että' rottweileri on koira' ja ' munchkin on kissa'.

Koiraa kutsutaan predikaatiksi. Koira sisältää yhden argumentin. sana ' rottweiler suluissa ( ). Rottweileria kutsutaan atomiksi.

Esimerkki säännöstä on ohjelman viimeinen rivi.

 animal(A) :- dog(A). 

Kaksoispiste(:-)-merkki luetaan 'jos'. Tässä A on muuttuja, ja se edustaa mitä tahansa arvoa. Luonnollisella tavalla sääntö voidaan lukea seuraavasti: 'Jos A on eläin, niin A on koira'.

Yllä oleva lauseke osoittaa, että rottweileri on eläin. Prolog voi myös tehdä tällaisen vähennyksen:

?- eläin (rottweiler).
Joo

Viittaakseen siihen munchkin on eläin, siitä ei ole todisteita.

?- eläin (munchkin).
Ei

Lisää terminologiaa

Tavoiteehdon arviointi määrittää, täyttyykö se vai ei. Se tarkoittaa myös sitä, että tavoite arvostetaan tosi tai epätosi.

Huomaa, että kun käyttäjä syöttää tavoitteen, se voidaan joskus tulkita komennona. Esimerkiksi,

? - pysähdy. 'Sitä käytetään Prolog-järjestelmästä poistumiseen.'

Joskus sitä voidaan pitää kysymyksenä, kuten

?- eläin (rottweiler). & 'Onko rottweiler eläin?'

Seuraava ohjelma näyttää toisen esimerkin eläimistä. Se sisältää kahdeksan lauseketta. Kommentti näkyy koko tekstinä merkkien /* ja */ välissä.

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

Predikaattikoiralla ja predikaattikissalla on molemmilla neljä lauseketta. Oletetaan, että tekstitiedostossa 'animal.pl' ohjelma on tallennettu ja tuloste luodaan lataamalla ohjelma ja järjestelmäkehotteessa syötämme tavoitesarjan seuraavasti:

?- konsultoi ('animals1.pl'). Järjestelmäkehote
# 0,01 sekuntia kuulla animals.pl animals.pl ladattu konsultilla

?- koira (rottweiler).
Joo

?- koira (nyrkkeilijä).
Ei

?- koira(A).
A = rottweiler taukoja – käyttäjä painaa paluunäppäintä

?- koira(B).
B = rottweiler; taukoja? käyttäjä painaa ;
B = villakoira; taukoja? käyttäjä painaa ;
B = bulldoggi; taukoja? käyttäjä painaa ;
B = dobermann Ei taukoa? Se siirtyy seuraavalle riville

?- kissa(A). A = sfinksi; tauko? käyttäjän puristimet;
A = Bengalin taukoja? käyttäjä painaa return

?- kuuntelee (koira). Se listaa kaikki lauseet, jotka määrittelevät predikaatin koiran

/* koira/1 */

koira (rottweiler).
koira (villakoira).
koira (bulldoggi).
koira (dobermann).
Joo
?-

Tässä esimerkissä esitellään useita Prologin uusia ominaisuuksia. Kysely on seuraava:

?- koira(A).

Se tarkoittaa, että etsi A:n arvo, ja siitä tulee koiran nimi. Prologin vastaus on seuraava:

A = rottweiler

Muut mahdolliset A:n vastaukset ovat seuraavat: villakoira, bulldoggi, dobermann. Se aiheuttaa Prologin tauon, ja tämän vuoksi meidän on odotettava, että käyttäjä painaa 'return'-näppäintä ennen kuin se lähettää järjestelmäkehotteen ?-.

Voimme syöttää seuraavan kyselyn seuraavasti:

?- koira(B).

Tämä kysely on sama kuin edellinen. Yllä oleva kysely tarkoittaa, että 'etsi B:n arvo, niin se on koiran nimi'. Prologin vastaus on seuraava:

B = rottweiler

armstrongin numero

Prolog pysähtyy jälleen. Tällä kertaa käyttäjä painaa puolipistettä (;) -näppäintä. Nyt Prolog etsii B:lle vaihtoehtoisen arvon, joka täyttää maalikoiran(B). Se vastaa seuraavasti:

B = villakoira

Prolog pysähtyy jälleen. Käyttäjä painaa uudelleen puolipistenäppäintä (;). Prolog tuottaa lisäratkaisun seuraavasti:

B = bulldoggi

Prolog pysähtyy jälleen. Käyttäjä painaa uudelleen puolipistenäppäintä (;). Prolog tuottaa lisäratkaisun seuraavasti:

B = dobermann

Prolog tunnistaa, että ratkaisua ei ole enää saatavilla, kun ei keskeytä, vaan järjestelmä kysyy ?- siirtymällä välittömästi ulostuloon.

Tässä esimerkissä esitellään uusi sisäänrakennettu predikaatti. Tavoitteen määrittäminen

?- listaus (koira)

Yllä olevassa tavoitteessa Prolog listaa kaikki neljä lausetta, jotka määrittelevät predikaattikoiran. Ne määritetään samassa järjestyksessä kuin ne ladattiin tietokantaan.

Muuttujien käyttö kyselyssä on esitetty seuraavassa esimerkissä. Tavoitteen järjestys on seuraava:

a-kissa(A),koira(B).

Tämä antaa meille kaikki mahdolliset kissan ja koiran yhdistelmät.

a-kissa(A),koira(B).
A = sfinksi,
B = rottweiler;

java8 ominaisuudet

A = sfinksi,
B = villakoira;

A = sfinksi,
B = bulldoggi;

A = sfinksi,
B = dobermann;

jne.

Sitä vastoin tavoitejärjestys on seuraava:

a-kissa(A), koira(A).

Tämä antaa kaikki eläimet, jotka ovat sekä kissa että koira (tietokannassa tällaista eläintä ei ole). Tässä A on 'mikä tahansa arvo' sekä kissa(A) että koira(A), mutta molemmilla on oltava sama arvo.

a-kissa(A),koira(A).
Ei