Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Spec_Mov_3k_4k_Lect.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.46 Mб
Скачать

Базовые объекты данных

Основными конструкциями логического программирования являются термы и выражения (или утверждения). Объекты универсума рассуждений представляются с помощью термов:

  • индивидных констант (атомов),

  • переменных и

  • составных (или структурных) термов.

Пример

Индивидные константы

жаклин, генрих_4, авс

123, 1.7, ‘Вопрос?’

Переменные (всегда начинаются с заглавной буквы)

Составной терм состоит из функтора и последовательности из одного или более аргументов, являющихся термами.

Пример

независимая_газета(вечерний_киев, 1991)

list(a, list(b, nil)), foo(X)

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

Факты

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

Пример

mother(julia, evdokia)

автор(эрнани, гюго)

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

Пример

plus(0, 0, 0).

plus(0, 1, 1).

plus(1, 0, 1).

Каждый факт в логической программе должен заканчиваться символом точка. Простейший вид логической программы это множество фактов.

Вопросы

Из предикатов, включенных в программу строят вопросы. Ответ на вопрос зависит от множества фактов и правил, включенных в программу. Например, ответ на вопрос:

?- plus(0, 0, 0).

дает ответ ДА(YES). Ответ на вопрос:

?- plus(1, 1, 1).

дает ответ НЕТ(NO). Результаты представлены для множества фактов, перечисленных в предыдущем примере.

Вопросы, не содержащие никаких переменных называются «да-нет» вопросами. Логические программы могут включать, также, конъюнктивные и экзистенциональные вопросы, а возможно и их сочетания. Первый тип вопросов включает логические связки and, вместо которых обычно применяют символ запятой. Второй тип вопросов включает по меньшей мере одну переменную.

Пример

?- plus(0, 1, 1), plus(1, 0, 1).

Логическая программа не предполагает никакой ее интерпретации. Хотя программист, например, вышепредставленный вопрос может для себя сформулировать его так:

«будет ли получена 1 в результате суммирования 0 и 1 и будет ли получена 1 в результате суммирования 1 и 0 ?». Т.к. оба факта содержатся в программе, то ответ – ДА.

Вопросы, включающие переменные носят перечислительный характер. Ответы в этом случае представляют собой списки термов. Вопросы с переменными называются экзистенциональными.

Пример

Вопрос «?- plus(0, X, Y).» можно интерпретировать следующим образом:

«Cуществует такое X и такое Y, что между ними выполняется отношение plus(0, X, Y)». Результатом ответа на вопрос: «?- plus(X, Y, 1)» будет:

X = 0 Y = 1

X = 1 Y = 0

НЕТ.

Переменные

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

Пример

?- plus(X, _, _).

В данном случае результат будет отображаться только для переменной X, хотя в процессе построения вывода анонимные переменные будут унифицироваться некоторыми значениями. Анонимные переменные, перечисленные в пределах конъюнкции считаются не связанными между собой. Так, вопрос, представленный выше можно интерпретировать, например, так: «Какое значение соответствует результату, это значение сложить с произвольным значением?».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]