logo

Пролог Програмс

Коришћење уграђених предиката, редослед циљева или одређивање циља у системском одзивнику не би имали малу вредност. Да би написао Пролог програм, прво, корисник мора да напише програм који је написан на Пролог језику, учита тај програм, а затим на промпту наведе низ од једног или више циљева.

Да бисте креирали програм у Прологу, једноставан начин је да га откуцате у уређивач текста и затим га сачувате као текстуалну датотеку као што је пролог1.пл .

Следећи пример показује једноставан програм Пролог. Програм садржи три компоненте, које су познате као клаузуле. Свака клаузула се завршава употребом тачке.

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

Коришћење уграђеног предиката ' консултовати' , горњи програм се може учитати у Пролог систем.

?-цонсулт('пролог1.пл').

Ово показује да датотека пролог1.пл постоји, а пролог програм је системски исправан, што значи да има важеће клаузуле, циљ ће успети, а да би потврдио да је програм исправно прочитан, производи једну или више линија излаза. на пример.,

?-
# 0,00 секунди за консултовање пролог1.пл
?-

посебан стринг у Јави

Алтернатива за 'консултовање' је 'Учитај', која ће постојати у опцији менија ако Пролог систем има графички кориснички интерфејс.

Када се програм учита, клаузула ће бити смештена у простор за складиштење, а то складиште је познато као Пролог база података. Као одговор на системски упит, наведите редослед циљева и то ће навести Пролог да тражи и користи клаузуле неопходне за процену циљева.

Терминологија

У следећем програму три реда приказују клаузуле.

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

Коришћењем тачке, свака клаузула ће бити прекинута. Пролог програми имају низ клаузула. Чињенице или правила описани су овим клаузулама.

Пример чињенице је пас (ротвајлер) и мачка (мунцхкин) . Они значе да ' ротвајлер је пас' и ' мунцхкин је мачка'.

Пас се зове предикат. Пас садржи један аргумент. реч ' ротвајлер' у загради ( ). Ротвајлер се назива атом.

Пример правила је последња линија програма.

 animal(A) :- dog(A). 

Знак двотачка(:-) ће бити прочитан као 'иф'. Овде је А променљива и представља било коју вредност. На природан начин, правило се може прочитати као 'Ако је А животиња, онда је А пас'.

Горња клаузула показује да је ротвајлер је животиња. Такав одбитак може да направи и Пролог:

?- животиња (ротвајлер).
да

Да то имплицирам мунцхкин је животиња, нема доказа о томе.

?- животиња (мунцхкин).
Не

Више терминологије

Процена термина циља одређује да ли је он задовољан или не. То такође значи да се циљ процењује на тачно или нетачно.

Имајте на уму да када корисник унесе циљ, понекад се то може протумачити као наредба. На пример,

?- застој. 'Користи се за излазак из Пролог система.'

Понекад се то може сматрати питањем као што је,

?- животиња (ротвајлер). & 'Да ли је ротвајлер животиња?'

Следећи програм показује још један пример о животињама. Састоји се од осам клаузула. Коментар је приказан целим текстом између /* и */.

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

Предикат пас и предикат мачка имају четири реченице. Претпоставимо да је у текстуалној датотеци 'анимал.пл' програм сачуван, а излаз је генерисан учитавањем програма и на системском промпту уносимо низ циљева на следећи начин:

?- цонсулт('анималс1.пл'). Системски промпт
# 0,01 секунда за консултовање животиња.пл анималс.пл учитано коришћењем консултације

?- пас (ротвајлер).
да

?- пас (боксер).
Не

?- пас (А).
А = ротвајлер паузира - тастер за повратак је притиснут од стране корисника

?- пас (Б).
Б = ротвајлер; паузе ? корисник притиска ;
Б = пудлица; паузе ? корисник притиска ;
Б = булдог; паузе ? корисник притиска ;
Б = доберман Нема паузе? Прећи ће на следећи ред

?- мачка(А). А = сфинга; паусе ? корисник притиска;
А = Бенгалске паузе? корисник притисне повратак

?- слушање (пас). Он ће навести све клаузуле које дефинишу предикат пас

/* пас/1 */

пас (ротвајлер).
пас (пудлица).
пас (булдог).
пас (доберман).
да
?-

У овом примеру су представљене разне нове карактеристике Пролога. Упит је следећи:

?- пас (А).

То значи да ћете пронаћи вредност А и то ће бити име пса. Одговор Пролога је следећи:

А = ротвајлер

Други могући одговори А су следећи, пудла, булдог, доберман. То ће изазвати паузу Пролога, и због тога морамо да сачекамо да корисник притисне тастер 'ретурн' пре него што избаци системски промпт ?-.

Следећи упит можемо да унесемо на следећи начин:

?- пас (Б).

Овај упит је исти као и раније. Горњи упит значи да 'нађите вредност Б и то ће бити име пса'. Одговор Пролога је следећи:

Б = ротвајлер

дфс вс бфс

Пролог ће поново паузирати. Овај пут тастер са тачком и зарезом (;) притисне корисник. Сада ће Пролог пронаћи алтернативну вредност Б која задовољава циљни пас(Б). Одговориће на следећи начин:

Б = пудлица

Пролог ће поново паузирати. Тастер са зарезом (;) поново притисне корисник. Пролог производи даље решење на следећи начин:

Б = булдог

јава анонимна функција

Пролог ће поново паузирати. Тастер са зарезом (;) поново притисне корисник. Пролог производи даље решење на следећи начин:

Б = доберман

Пролог препознаје да нема више доступног решења тако што не паузира, већ системски промпт ?- тако што одмах прелази на излаз.

У овом примеру је уведен нови уграђени предикат. Одређивање циља

?- листинг (пас)

У горњем циљу, Пролог ће навести све четири клаузуле које дефинишу предикат пас. Они ће дефинисати истим редоследом како су учитани у базу података.

Коришћење променљивих у упиту приказано је у следећем примеру. Редослед циља је следећи:

?-мачка (А), пас (Б).

Ово ће нам дати све могуће комбинације мачке и пса.

?-мачка (А), пас (Б).
А = сфинга,
Б = ротвајлер;

А = сфинга,
Б = пудлица;

А = сфинга,
Б = булдог;

А = сфинга,
Б = доберман;

итд.

Насупрот томе, редослед циљева је следећи:

?-мачка(А), пас(А).

Ово ће дати све животиње које су и мачка и пас (у бази података нема такве животиње). Овде је А 'било која вредност' и за мачка(А) и за пса(А), али оба морају имати исту вредност.

?-мачка (А), пас (А).
Не