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

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

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

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

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

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

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

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

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

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

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

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

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

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

П рограммы на языке Пролог оперируют данными двух основных типов: числами и символами. Атом — это строка символов, обозначающая некоторый абстрактный объект. Атом считается неделимым элементом программы, в связи с чем и выбрано его название. Атом начинается со строчной буквы и состоит из букв, цифр и символа подчеркивания. Если атом должен содержать иные специальные знаки или начинаться с прописной буквы, то он заключается в апострофы.

Ч исла и атомы могут объединяться в конгломераты, называемые структурами и списками. Структура — это конструкция, состоящая из имени структуры и списка ее элементов, разделенных запятыми и заключенных в скобки. Элементами структур могут быть числа, атомы, переменные, другие структуры и списки. Количество элементов структуры фиксировано и не может изменяться при выполнении программы. Структуры представляют собой нечто среднее между массивами и записями процедурных языков, так как типы элементов структуры могут быть различными, как у записей, а идентификация их производится по номерам, как у массивов.

Примеры структур: str (a, b, s, d); имеет (иван, машина).

С писки представляют собой объединения элементов произвольных видов, разделенных запятыми и заключенных в квадратные скобки. Списки отличаются от структур тем, что не имеют имен, и тем, что количество их элементов может меняться при выполнении программы.

Примеры списков: [1, 3, 5, 7]; [красный, желтый, зеленый].

Э лементами структур и списков могут быть так называемые переменные, обозначаемые именами, начинающимися с прописной буквы.

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

Операция сопосталения определяется так:

П рограмма на языке Пролог состоит из двух основных конструкций: фактов и правил. Факт — это структура, завершающаяся символом «точка». Факты представляют собой те данные, с которыми оперирует программа. Совокупность фактов, относящихся к некоторой задаче Пролога, называется базой данных Пролога. С помощью фактов описываются свойства объектов и отношения между ними. Факт, состоящий из структуры с одним элементом, обычно описывает некоторое свойство, например, факт «собака (бобик)» определяет, что объект «бобик» имеет свойство «быть собакой». Этот факт можно интерпретировать на естественном языке так: «Бобик есть собака» или более строго так: «Высказывание «Бобик есть собака» истинно». Факты с более чем одним элементом описывают взаимосвязи объектов (отношения между ними), например, факт «имеет (иван, машина)» определяет, что объекты «иван» и «машина» находятся между собой в таком отношении, что второй является собственостья первого. Этот факт интерпретируется на русском языке так «Иван имеет машину». Разумеется, Пролог не понимает смысла имен, отношений и объектов, этот смысл приписывается им только в сознании программиста, разрабатывающего программу. В программе на Прологе можно задать факты совершенно бессмысленные с точки зрения обыденного здравого смысла, например, «имеет (иван, юпитер)», т.е. «Иван является собственником планеты Юпитер». Для Пролога этот факт ничем не хуже первого.

Другой составной частью программ на языке Пролог являются правила. Правило есть конструкция вида:

A: — B, C, D,
где A, B, C, D — структуры. Структура A называется заголовком правила, а B, C, D — подцелями. Правило определяет истинность некоторого высказывания. Формальная запись правила интерпретируется так: «Высказывание A истинно, если одновременно истинны высказывания B, C и D».

Э то правило определяет свойства объекта «иметь собаку» так: «Некто имеет собаку, если он имеет нечто, что является собакой».

П о сути выполнение программы на языке Пролог представляет собой доказательство истинности некоторого логического утверждения в рамках данной совокупности фактов и правил. Алгоритм этого доказательства, называемый алгоритмом логического вывода, полностью определяет принципы выполнения программ на языке Пролог и представляет собой того второго «кита», на котором стоит Пролог.

В ыполнение пролог-программы всегда начинается с ввода так называемого запроса, который представляет собой конструкцию вида

Д ля выполнения некоторой совокупности подцелей, будь то запрос, или подцели, входящие в правило, Пролог берет первую подцель и пытается доказать истинность этого утверждения (или выполнить подцель). Для этого просматриваются все факты и правила, составляющие программу, и ищется факт, сопоставимый с подцелью, или правило, заголовок которого сопоставляется с ней. Если такой факт найден, то истинность утверждения считается доказанной и берется следующая подцель. Если найдено правило, то Пролог пытается по тем же правилам доказать истинность всех подцелей данного правила. Если при поиске обнаружено, что имеется несколько вариантов доказательства истинности подцели (т.е. есть несколько фактов или правил, сопоставимых с ней), то Пролог автоматически отмечает так называемую точку возврата, т.е. запоминает альтернативные варианты решения. Если в какой-то момент выполнения программы очередная подцель не может быть выполнена, автоматически производится возврат к последней отмеченной точке возврата и Пролог пытается найти другой вариант доказательства (или, что то же самое, другой путь выполнения программы). Автоматический перебор всех возможных вариантов решения является фундаментальным свойством языка Пролог, которое часто оказывается крайне полезным и значительно сокращает объем текста программы. Кроме фактов и правил, определяемых программистом, в программе можно использовать так называемые встроенные предикаты, выполняющие всевозможные вспомогательные действия — вычисления, сравнение величин, ввод-вывод и др. Вместо десятков разнообразных операторов, из которых конструируется программа в процедурных языках, в языке Пролог имеется всего один вид оператора — правило, что и определяет лаконичность языка.

lib.zabspu.ru

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Prolog урок 3. Факты и правила, родственные отношения

Условные отношения или правила в Prolog

Рассмотрим пример, когда факты связаны условным отношением с другими уже известными фактами, в таком случае они могут называться правилами:

likes(cindy, X):- likes(bill, X). /* Синди любит все, что любит Билл */

likes(cindy, X) является заголовком правила
likes(bill, X) является телом правила или его хвостовой целью.

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

X является бабушкой Y , если X является мамой Z и Z является мамой Y .
И если смотрим по отцу, а не по матери:

X является бабушкой Y , если X является мамой Z и Z является папой Y .

Или так:
Первое правило гласит, что X является бабушкой Y , если существует такой Z , что X является мамой Z , а Z — мамой Y . Второе правило гласит, что X является бабушкой Y , если существует такой Z , что X является мамой Z , а Z — папой Y .

Очевидно, что в примере X , Y и Z — это переменные.

Переменные могут быть свободными или связанными.

Свободная переменная пока не имеет значения. Такие переменные еще называют неконкретизированными.

Переменная, которая получила какое-то значение и оказалась связанной с определенным объектом, называется связанной.

likes (bill, Something)if green(Something).

Это правило можно интерпретировать, как «Билл любит все зеленое». В данном примере Something — это переменная, т.к. начинается с заглавной буквы и без кавычек.

domains a=symbol b=integer predicates pol(a,a) vozrast (a,b) clauses pol(ivan,boy). pol(sergey,boy). pol(mary,girl). vozrast(ivan,3). vozrast(sergey,4). vozrast(mary,5).

  • Мэри любит яблоки только, если они зеленые,
  • Бет любит вообще только зеленые фрукты и овощи,
  • Мэри любит яблоки, только если их любит Бет.
  • Добавьте недостающие фрагменты и реализуйте запросы в окне dialog:

  • любит ли Мэри яблоки,
  • любит ли Бет апельсины.
  • Проанализируйте ответы на запросы.

    domains a=symbol predicates likes (a,a) green(a) clauses likes (mary,apples). likes (beth,apples). likes(mary,oranges). likes (mary, tomatoes). likes (mary,apples)if ________. likes(___,__) if likes(___,__). likes (___,__)if green(__). green(apples). green(goroh).

    Порядок выполнения команд компилятором TProlog

    Пусть программа на Турбо-Прологе содержит факт:

    likes(mary,apples). /* Мэри любит яблоки */

    И правило:

    likes(beth,X) if likes(mary,X). /* Бет любит это, если Мэри любит это */

    Вводим цель:

    likes(beth,apples). /* бет любит яблоки */

    Турбо-Пролог воспринимает утверждение цели и начинает поиск правил и фактов программы для сопоставления с предикатом likes :

  1. Сопоставление с фактом: likes(mary,apples). – ложь
  2. Сопоставление с головной частью правила: likes(beth,X) – переменной Х присваивается значение apples
  3. Попытка выполнения условия: if likes(mary,X)
  4. Проверка подзадачи и подцели: likes(mary,apples).
  5. Сопоставление с фактом: likes(mary,apples). – Истина.

    Правило или факт?

    Если правило выглядит как:

    likes (beth,apples)if likes(mary,apples).

    То это и правило и факт одновременно, т.к. голова правила имеет форму факт

    Но в другом случае, в голове правила может быть расположена переменная:

    labs.org.ru

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

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

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

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

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

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

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

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

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

    www.verim.org