logo

Програми на Prolog

Използването на вградените предикати, последователността от цели или уточняването на цел в системната подкана би имало малка стойност само по себе си. За да напише програма Prolog, първо, потребителят трябва да напише програма, която е написана на езика Prolog, да зареди тази програма и след това да посочи последователност от една или повече цели при подканата.

За да създадете програма в Prolog, лесният начин е да я въведете в текстовия редактор и след това да я запишете като текстов файл като prolog1.pl .

Следващият пример показва проста програма на Prolog. Програмата съдържа три компонента, които са известни като клаузи. Всяка клауза завършва с точка.

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

Използване на вградения предикат ' консултирам се , горната програма може да бъде заредена в системата Prolog.

?-consult('prolog1.pl').

Това показва, че файлът prolog1.pl съществува и програмата prolog е системно правилна, което означава, че има валидни клаузи, целта ще успее и за да потвърди, че програмата е прочетена правилно, тя произвежда един или повече реда изход. напр.

?-
# 0,00 секунди за справка с prolog1.pl
?-

кръгла математическа java

Алтернативата на 'consult' е 'Load', която ще съществува в опцията от менюто, ако системата Prolog има графичен потребителски интерфейс.

Когато програмата се зареди, клаузата ще бъде поставена в област за съхранение и тази област за съхранение е известна като база данни Prolog. В отговор на подканата на системата, укажете последователност от цели и това ще накара Prolog да търси и използва клаузите, необходими за оценка на целите.

Терминология

В следващата програма три реда показват клаузите.

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

Използвайки точката, всяка клауза ще бъде прекратена. Пролог програмите имат последователност от клаузи. Фактите или правилата са описани в тези клаузи.

Пример за факти е куче (ротвайлер) и котка (манчкин) . Те означават, че ротвайлер е куче' и ' манчкин е котка'.

Куче се нарича предикат. Кучето съдържа един аргумент. дума ' ротвайлер оградено в скоби ( ). Ротвайлер се нарича атом.

Примерът за правило е последният ред на програмата.

 animal(A) :- dog(A). 

Знакът двоеточие (:-) ще се чете като „ако“. Тук A е променлива и представлява произволна стойност. По естествен начин правилото може да се чете като „Ако А е животно, то А е куче“.

Горната клауза показва, че ротвайлер е животно. Такова приспадане може да се направи и от Prolog:

?- животно (ротвайлер).
да

Да намекне това манчкин е животно, няма доказателства за това.

?- животно (манчкин).
Не

Още терминология

Оценяването на дадена цел определя дали тя е изпълнена или не. Това също означава, че целта се оценява на вярно или невярно.

Обърнете внимание, че когато потребител въведе цел, понякога това може да се интерпретира като команда. Например,

?- спиране. „Използва се за излизане от системата Prolog.“

Понякога може да се разглежда като въпрос като,

?- животно (ротвайлер). & „Ротвайлер животно ли е?“

Следващата програма показва друг пример за животни. Състои се от осем клаузи. Коментарът се показва от целия текст между /* и */.

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

Сказуемото куче и сказуемото котка имат по четири клаузи. Да приемем, че в текстов файл „animal.pl“ програмата е била запазена и изходът е генериран чрез зареждане на програмата и в системния ред ние въвеждаме последователност от цели, както следва:

?- консултирайте се ('animals1.pl'). Системна подкана
# 0,01 секунди за консултация с animals.pl animals.pl, зареден с помощта на консултацията

?- куче (ротвайлер).
да

?- куче (боксер).
Не

?- куче(A).
A = ротвайлер пауза - клавишът за връщане е натиснат от потребителя

?- куче (B).
B = ротвайлер; паузи? потребителски преси;
B = пудел; паузи? потребителски преси;
B = булдог; паузи? потребителски преси;
B = доберман Без пауза? Ще премине на следващия ред

?- котка (A). A = сфинкс; пауза? потребителски преси;
A = Бенгалски паузи? потребителят натиска връщане

?- слушане (куче). Той ще изброи всички клаузи, които определят предикат dog

/* куче/1 */

куче (ротвайлер).
куче (пудел).
куче (булдог).
куче (доберман).
да
?-

В този пример се въвеждат различни нови характеристики на Prolog. Запитването е както следва:

?- куче(A).

Това означава, че намерете стойността на А и това ще бъде името на кучето. Отговорът на Prolog е следният:

А = ротвайлер

Други възможни отговори на А са, както следва, пудел, булдог, доберман. Това ще доведе до пауза на Prolog и поради това трябва да изчакаме потребителят да натисне клавиша 'return', преди да изведе системния ред ?-.

Можем да въведем следващата заявка, както следва:

?- куче (B).

Тази заявка е същата като преди. Горната заявка означава, че „намерете стойността на B и тя ще бъде името на куче“. Отговорът на Prolog е следният:

B = ротвайлер

алгоритъм за RSA

Prolog отново ще спре. Този път клавишът точка и запетая (;) е натиснат от потребителя. Сега Prolog ще намери алтернативна стойност на B, която удовлетворява целта dog(B). Той ще отговори, както следва:

B = пудел

Prolog отново ще спре. Клавишът точка и запетая (;) се натиска отново от потребителя. Prolog произвежда допълнително решение, както следва:

B = булдог

как да върна масив java

Prolog отново ще спре. Клавишът точка и запетая (;) се натиска отново от потребителя. Prolog произвежда допълнително решение, както следва:

B = доберман

Prolog разпознава, че няма повече налично решение, като не прави пауза, а системната подкана ?- като незабавно преминава към изхода.

В този пример е въведен нов вграден предикат. Уточняване на целта

?- списък (куче)

В горната цел Prolog ще изброи всичките четири клаузи, които дефинират предиката dog. Те ще дефинират в същия ред, в който са заредени в базата данни.

Използването на променливи в заявката е показано в следния пример. Последователността на целта е следната:

?-котка(A),куче(B).

Това ще ни даде всички възможни комбинации от котка и куче.

?-котка(A),куче(B).
A = сфинкс,
B = ротвайлер;

A = сфинкс,
B = пудел;

A = сфинкс,
B = булдог;

A = сфинкс,
B = доберман;

и т.н.

За разлика от това, последователността на целта е следната:

?-котка(A), куче(A).

Това ще даде всички животни, които са едновременно котка и куче (в базата данни няма такова животно). Тук A е „всяка стойност“ както в cat(A), така и в dog(A), но и двете трябва да имат една и съща стойност.

?-котка(A),куче(A).
Не