Вход/Регистрация
Программирование на языке пролог
вернуться

Клоксин У.

Шрифт:

Рис. 1.1.

1.5. Правила

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

нравится(джон,альфред).

нравится(джон,бертран).

нравится(джон,чарлз).

нравится(джон,дейвид).

* * *

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

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

• Я пользуюсь зонтом, если идет дождь.

• Джон покупает вино, если оно дешевле, чем пиво.

Правила используются также для выражения определений, например:

Xявляется птицей, если:

Xявляется живым существом и Xимеет перья.

или

Xявляется сестрой Y, если:

Xявляется женщино и Xи Yимеют одних и тех же родителей.

В последних примерах мы использовали переменные Xи Y. Важно помнить, что каждое вхождение переменной в правило обозначает один и тот же объект. Иначе мы разрушили бы саму суть определения. Например, используя приведенное выше определение птицы, мы не смогли бы показать, что Фред является птицей на основании того, что Фидо – это живое существо, а Мэри имеет перья. Этот принцип согласованной интерпретации переменных справедлив также и для правил в Прологе.

Правило – это некоторое общее утверждение об объектах и об отношениях между ними.Например, мы можем сказать, что Фред является птицей, если Фред является живым существом и Фред имеет перья, мы можем также сказать, что Бертрам является птицей, если Бертрам является живым существом и Бертрам имеет перья. Таким образом, мы допускаем, что при каждом новом использованииправила переменная обозначает новый, отличный от прежнего объект. Конечно, в рамках конкретного использования правила переменные интерпретируются согласованно, как на это указывалось выше.

Рассмотрим несколько примеров, начав с правила, содержащего одну переменную и конъюнкцию:

Джону нравится любой, кому нравится вино,или,

другими словами,

Джону нравится что-то, если чему-то нравится вино,

или, используя переменные,

Джону нравится X, если Xнравится вино.

В Прологе правило состоит из заголовкаи телаправила. Заголовок и тело соединяются с помощью символа :-, который состоит из двоеточия

:
и тире
–
. Символ ':-' читается если.

Предыдущий пример записывается на Прологе следующим образом:

нравится(джон,X):- нравится(Х,вино).

Отметим, что правила также заканчиваются точкой. Заголовком этого правила является нравится(джон,Х). Заголовок правила описывает факт, для определения которого предназначено это правило. Тело правила, в данном случае нравится(Х,вино), описывает конъюнкцию целей, которые должны быть последовательно согласованы с базой данных, для того чтобы заголовок правила был истинным. Например, мы можем сделать Джона более разборчивым в выборе тех, кто ему нравится, просто добавив к телу правила еще несколько целевых утверждений, разделив их запятыми:

нравится(джон,X):- нравится(Х,вино), нравится(X,пища).

или, другими словами, Джону нравится любой, кому нравятся вино и пища.Или, предположим, что Джону нравится любая женщина, которой нравится вино:

нравится(джон,Х):- женщина(Х), нравится(Х,вино).

Всякий раз, когда мы имеем дело с правилом в Прологе, необходимо отмечать все вхождения переменных. В последнем примере переменная Xиспользована три раза. Всякий раз, как переменная X конкретизируется некоторым объектом (ей присваивается значение), все вхождения Xв пределах области действия этой переменнойстановятся конкретизированными. При каждом употреблении правила область действияпеременной X– это все правило, начиная с заголовка и до точки '.' в конце этого правила. Так, если в приведенном выше правиле переменная X оказалась конкретизированной, принимая значение мэри,то Пролог попытается согласовать с базой данных целевые утверждения женщина(мэри)и нравится(мэри,вино).

  • Читать дальше
  • 1
  • ...
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: