ПредишенСледващото

Възможността за издаване на многократни решения

Отличителната способността на пролога е, че когато търсите решения пролога издаде списък със съответстващи стойности. Ето защо, в един Prolog предикат може да се представи с помощта на набор от правила, всеки от които може да даде отговор. Пример. Да предположим, че имаме следното описание на предиката "chislo_bolshe":

След това се обадете на решаване Пролог

Ще дадем отговори: Още = 5, 8.

С други думи, в съответствие с правилата в предиката "chislo_bolshe" повече от броя 4 има два номера 5 и 8. Това може да се види, че наборът от правила, работи като разклоняване структура, в случай на алгоритмични езици. Предикати, които могат да изпълняват няколко стойности, наречени несигурен (nondeterm). Предикати, които извличат само една стойност, наречени определен (determ). Отделно от неясни предикати в пролога все още се използва механизма на несигурни факти. Пример.

След това се обадете на решаване Пролог

Отговорът ще бъде: Какво = апартамент, деца

Rollback (връщане назад)

Ние сега се въведе концепцията за намаление на цените (връщане назад). Намаление на цените - е опит да се намери следващата версия на пролога на разтвора. Намаление на цените се нарича провал в някакъв момент от програмата, в резултат на пролог за да се опита да намери следващото решение. Rolling отива на мястото, където е възможно да се изчисли различно решение. В този случай, всички свързани с тях променливи, които са били свързани под мястото, където има друга опция решения са освободени. Когато се свържете с решаване на пролога, за намаление на цените е създадена от пролог за издаване на стойностите на решения. Пример.

Клипинг (Cut)

Ние сега се въведе концепцията за подрязване. Прекъсване в пролог нарича механизъм, който не позволява груба сила на правилата за предикатните са под действащите правила и забранява намаление на цените механизъм. Клипинг се обозначава с "!" Знак. Пример. Ако се пренапише предходната предиката "chislo_bolshe" като:

След това се обадете на решаване Пролог

Ще дам отговора: Повече = 5.

Това е така, защото всяко правило предикат, след проверка за повече е нарязан оператор "!", Който забранява пролога и последвалия натиск да търсите други отговори.

Пример на механизма за отката и рязане равнина.

Намаление на цените механизъм и свързан да разгледаме следния пример. Да предположим, че имаме списък със стойности, които трябва да се намери някаква стойност и да даде стойност, застанал пред него. Както пролога е логичен език, проблемът е решен чрез създаване на набор от правила:

Когато повтаряне списък, ако текущият елемент не е най-желаната стойност, което правите прекалено много.

Когато повтаряне през списъка, ако текущата елемент е желаната стойност, спирката на бюста и връщане към предишния елемент.

Ако предишните правила не работят, а след това даде текущия елемент като предишната стойност.

Описание Prolog предикат изпълнението на тези правила ще бъде като този:

Знаейки, че в пролога, можете да използвате по реда на правилата, като начин за заобикаляне на правилата на последователността на избор и да знае за механизма на действие на съкращения, възможно е да се пренаредят правилата 1 и 2 места и премахнете отметката за несъответствие. Тогава ще получим следното описание на предиката:

Това описание се състои от три правила и извършва следните действия. Първото правило сравнява текущия елемент с желаната стойност, а ако те са равни, то тогава има) резитба предикат правила надолу по веригата от участие в търсенето, б), причинено от повреда, която води до изключване на рекурсия. Второто правило за вземане през всички елементи от списъка с помощта на самите покани, това е, което води до рекурсия. В този случай, се произнася с рекурсия на повикване не отрязване, а ако рекурсия за повикване ще се провали, а след това се контролира проходи, за да владеят предикат изхвърлят по-долу. Ако повикването е успешен рекурсия, тогава наречен стреляйки ( "!"), А след това от сказуемото. Третото правило извежда текущата позиция като предишната стойност, която е изправена пред желаната стойност, тя създава на изхода на изрезката и сказуемото. предикат действие от примера. Нека дадем решаване Prologue линия:

Prologue прави първата покана за сказуемото:

  • Правило 1 не работи 3 не е равно на 1. Преходът към второто правило:
  • Правило 2 е рекурсия nayti_pred_znachenie (3, [2,4,3,5,2] Предишен):
  • Правило 1 не работи 3 не е равно на 2. Преходът към второто правило:
  • Правило 2 е рекурсия nayti_pred_znachenie (3, [4,3,5,2] Предишен):
  • Правило 1 не работи 3 не е равно на 4. Преходът към второто правило:
  • Правило 2 е рекурсия: nayti_pred_znachenie (3, [3,5,2] Предишен):
  • Първото правило ще работи: 3 = 3. и се изпълнява: правилата за предикатните под клипинг и провал. Което води до провала на рекурсия, в резултат на провала.
  • 2. Продължава правила провал на рекурсия наричат ​​със списък на [3,5,2] води до провал на второто правило на това ниво. Пролог към третото правило.
  • Правило 3. Ето списък = [4,3,5,2]. Действието се развива: Предишни обедини с четири изхода изключване други възможни решения.
  • Продължава правила 2. рекурсия връща Предишна = 4 добра стойност. Изходите изключване други възможни решения.
  • Продължава правила 2. рекурсия връща Предишна = 4 добра стойност. Изходите изключване други възможни решения.
  • Продължава правила 2. рекурсия връща Предишна = 4 добра стойност. Изходите изключване други възможни решения.

Отговор Prologue Предишни = 4.

Сега нека да видим какво ще стане, ако се премахне прекъсването през второто правило:

Прологът ще даде някакви резултати вече:

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

Свързани статии

Подкрепете проекта - споделете линка, благодаря!