Начнем обсуждение с фактов об объектах. Предположим, мы хотим сообщить Прологу [1] факт: «Джону нравится Мэри». Этот факт включает в себя два объекта, обозначенных именами «Мэри» и «Джон», и отношение, обозначенное словом «нравится». В языке Пролог используется стандартная форма записи фактов:
нравится (джон, мэри).
Важно соблюдать следующие правила:
• Имена всех отношений и объектов должны начинаться со строчной буквы. Например, нравится, джон, мэри.
• Сначала записывается имя отношения. Затем через запятую записываются имена объектов, а весь список имен объектов заключается в круглые скобки.
• Каждый факт должен заканчиваться точкой.
Определяя с помощью фактов отношения между объектами, необходимо учитывать, в каком порядке перечисляются имена объектов внутри круглых скобок. Этот порядок может быть произвольным, но, выбрав один раз какой-то определенный порядок, мы должны везде следовать ему и далее. Например, в приведенном выше факте мы поставили на первое место в списке объектов «того, кому нравится», а объект «который нравится» стоит во второй позиции. Таким образом, факт нравится(джон,мэри) не одно и тоже, что нравится(мэри,джон) . В соответствии с принятой нами (хотя и произвольным образом) договоренностью первый факт говорит о том, что Джону нравится Мэри, в то время как второй факт говорит, что Мэри нравится Джон. Если мы хотим сказать, что Мэри нравится Джон, то мы должны сформулировать это утверждение явно, в виде факта
нравится(мэри,джон).
Взгляните на следующие примеры фактов, приведенные вместе с возможной их интерпретацией на естественном языке:
ценный(золото). Золото является ценным,
женщина(джейн). Джейн — женщина.
владеет(джон,золото). Джон владеет золотом.
отец(джон,мэри). Джон является отцом Мэри.
дает(джон,книга,мэри). Джон дает Мэри книгу.
Всякий раз когда используется некоторое имя, оно указывает на определенный индивидуальный объект. В силу жизненного опыта нам совершенно ясно, что имена джон и джейн относятся к индивидуальным объектам. Но в некоторых других фактах мы использовали имена золото и ценный , и совсем не очевидно, что они значат. Логики называют имена такого сорта «словами, не имеющими определенного значения вне контекста». Используя такие имена, мы должны решить, как интерпретировать эти имена. Например, имя золото могло бы относиться к некоторому объекту. В этом случае мысленный образ объекта имеет вид конкретного куска золота, который мы обозначаем именем золото . И когда мы записываем на Прологе ценный(золото) , мы должны понимать это в том смысле, что этот конкретный кусок золота, для обозначения которого мы использовали имя золото , является ценным. С другой стороны, мы могли бы интерпретировать имя золото как слово, обозначающее химический элемент золото с атомным весом 79, и, когда мы записываем ценный(золото) , мы должны понимать это так, что химический элемент золото является ценным. Таким образом, имеется несколько способов интерпретировать имя и именно автор программы определяет конкретную интерпретацию. До тех пор пока последовательно используется одна и та же интерпретация имен, никаких проблем не возникает. Выявлять отличия между различными интерпретациями необходимо с самого начала, с тем чтобы быть совершенно уверенным в том, что обозначают,имена.
Теперь пришла пора сказать несколько слов о терминологии. Имена объектов, список которых в каждом факте заключен в круглые скобки, называются аргументами. Заметим, что в программировании значение слова «аргумент» не имеет ничего общего с его общеупотребительным значением, используемым в контексте слов «диспут», «дебаты», «дискуссия», «спор» и т. п. Имя отношения, которое записывается непосредственно перед круглыми скобками, называется предикат. [2] Таким образом, ценный – это предикат, имеющий один аргумент, а нравится – предикат с двумя аргументами.
Имена объектов и отношений являются полностью произвольными. Например, вместо терма нравится(джон,мэри) мы могли бы с таким же успехом представить это как a(b,c) , помня при этом, что а значит нравится, b означает Джон, а с – Мэри. Однако обычно мы выбираем имена таким образом, чтобы они сами напоминали нам, что они значат. Следовательно, мы заранее должны решить, что значат наши имена и каким должен быть порядок аргументов. С этого момента необходимо последовательно придерживаться принятых соглашений.
Отношения могут иметь произвольное число аргументов. Если мы хотим определить предикат играть , в котором упоминаются два игрока и игра, в которую они играют между собой, то необходимы три аргумента. Здесь приведены два примера, показывающие, как это можно сделать:
играть(джон,мэри,футбол).
играть(джейн, джим,бадминтон).
Как мы увидим далее, такой способ обеспечивает возможность представления сложных взаимодействий между отношениями.
В Прологе можно объявить факты, которые не являются истинными в реальном мире. Например, можно было бы написать король(джон, франция) , чтобы объявить, что Джон является королем Франции. В реальном мире этот факт со всей очевидностью является ложным, в частности, потому, что монархия во Франции уничтожена приблизительно в 1792 г. Но Пролог не знает этого и не заботится об этом. Факты в Прологе просто позволяют выражать произвольные отношения между объектами.
Совокупность фактов в Прологе называется базой данных. Мы будем пользоваться термином база данных всякий раз при объединении вместе некоторых фактов (а в дальнейшем и правил) для совместного их использования при решении некоторой конкретной задачи.
Сегодня GPS навигаторы стали просто незаменимыми помощниками каждого водителя, и не только. http://www.a27.ru/netshop/gps/. |