Главная

ПРОЕКТ "ЧЕЛОВЕК. ЗЕМЛЯ. ВСЕЛЕННАЯ"

Инструменты пользователя

Инструменты сайта


project:prolog:fakty_i_pravila_v_prologe



Факты и правила в Прологе

Факты используются для представления данных, а правила используются для вывода логических заключений, то есть новых фактов. Факты и правила называются утверждениями. Типичная программа на Прологе (Prolog) содержит факты и правила, основанные на самых различных взаимосвязях предикатов.

Факты в Прологе

Факт записывается как предикат с одним или более объектами. Но факт может быть предикатом, не содержащим объектов, то есть предикатом с нулевой арностью. См. "Предикаты разных арностей"

Факт–утверждение:

finds(john,gold). /* Джон нашел золото */

В программе на Прологе утверждения для одного и того же предиката группируются вместе.

Правила в Прологе

Правило используется Прологом (Prolog) для проверки условия вывода нового факта. Правила в Прологе (Prolog) записываются в разделе утверждений (clauses). Программа может содержать достаточно много правил, вырабатывающих различные заключения. Эффект введения правил точно такой же, как если бы программа содержала большое число утверждений-фактов.

Правила имеют левую часть (голову) и правую часть, следующую за символом :- (условия правила или тело). Левая часть правила истинна, если истинна правая часть правила. Правила генерируют новые факты, когда все утверждения в теле оказываются вычисленными.

Так как головы утверждений, являющиеся правилами, имеют форму фактов, то правила могут рассматриваться как факты. Но, тем не менее, различия между фактами и правилами весьма существенны.

При трансляции утверждений Пролог (Prolog) контролирует правильность написания имени предиката, количество объектов и типы их доменов.

Пример использования правила:

отношение(объект1,объект2) условие отношение(объект1,объект2)
любит (бет, X) если любит (мэри, X)
  predicates
   likes(symbol,symbol)
  clauses
   likes(mary, apples).
   likes(beth, X) if likes(mary, X).

«Бет любит это, если Мэри любит это» - условная предпосылка со связкой «если», указывающей на условное отношение. Местоимение «это» может иметь переменное значение, изменяющиеся от предложения к предложению.

Как Пролог определяет, что надо подставить «яблоки» вместо X в этом правиле? Пролог сопоставляет все доступные ему факты (в данном случае, кто что любит) с любым правилом, с помощью которого могут быть выведены новые факты. Пролог не предоставляет возможность программисту выполнить такой приказ, как «на данном этапе сравнить X с яблоками и проверить, что это сравнение удовлетворяет некоторым условиям».

Пролог построен так, что он автоматически пытается выполнить сопоставление, используя принципы логики предикатов. Программисту только необходимо, используя синтаксис Пролога, описать к каким заключениям приведут какие условия. То есть необходимо сформулировать логические взаимоотношения, а программа использует эти утверждения о логических связях для получения заключения (новых фактов).

Для слова if (если) использует специальный символ :- (двоеточие с последующим тире).

Правило–утверждение:

  is(john,rich) if finds(john,gold). /* Джон богат, если Джон нашел золото */ 
  is(john,rich) :- finds(john,gold).

Связки в правилах

Часто условия требуют более одной предпосылки. Например:

«Джон и Мэри женаты, если Мэри жена Джона и если Джон муж Мэри».

married(john,mary) if wife(john,mary) and husband(mary,john).

Данное правило имеет два условия, соединенные словом and (и). Это есть связка двух условий, объединенных словом and. В Прологе вместо слова and часто используется запятая (,).

Также в Прологе может использоваться уловие ИЛИ (or). В Прологе вместо слова or часто используется точка с запятой (;).

married(john,mary) :- wife(john,mary); husband(mary,john).

Пример использования условия and:

/* Программа проверки цели: женаты ли John и Mary? */

predicates
  married(symbol,symbol)
  wife(symbol,symbol)
  husband(symbol,symbol)

clauses
  wife(john,mary).
  husband(mary,john).

  /* Джон и Мэри женаты, если (:-) Мэри жена Джона и (,) если Джон муж Мэри */
  married(john,mary) :- wife(john,mary), husband(mary,john).
  married(mary,john) :- wife(john,mary), husband(mary,john).

На запрос цели необходимо ввести married(john,mary) или married(mary,john)

!!Рекомендуем: Семейная Энциклопедия ЗдоровьяОбучениеКонсультация аналитикаОглавлениеГлавная сайта

Обсуждение

Ваш комментарий:
E K Z F M
 
project/prolog/fakty_i_pravila_v_prologe.txt · Последние изменения: 2012/01/16 13:11 (внешнее изменение)

Вы можете оставить свои комментарии в разделе "Обсуждение".
Рекомендуем оформить подписку на новости данного раздела. Для этого нажмите на кнопку "Подписаться", расположенную справа снизу каждой страницы (знак конверта).


www.work-zilla.com

Индекс цитирования