брат и сестра 240210

Использование правил в запросах

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

Николай и Анна являются мужем и женой. Их сына зовут Виктором,
а дочку - Елена.

Ниже приведен небольшой диалог, касающийся этой семьи.

Вопрос: Кем приходятся друг другу Елена и Виктор?
Ответ: Елена - сестра Виктора.
Вопрос: Из чего Вы это заключили?
Ответ: У Елены и Виктора одни и те же родители, Елена - девочка. Таким образом, Елена - сестра Виктора.

Второй из вопросов является разговорной формулировкой правила, которое будет использоваться для ответа на запрос.
Это правило можно перефразировать таким образом:

Елена - сестра Виктора, если
Елена - существо женского пола,
и родители Елены есть родители Виктора.

Факты, описывающие отношения между Николаем, Анной, Виктором и Еленой можно сформулировать при помощи таких утверждений Турбо-Пролога:

male("Николай"). /* Николай - мужского пола */
male("Виктор"). /* Виктор - мужского пола */
female("Анна"). /* Анна - женского пола */
female("Елена"). /* Елена - женского пола */
parents("Виктор","Николай","Анна"). /* Родители Виктора это Николай и Анна */
parents("Елена","Николай","Анна"). /* Родители Елены это Николай и Анна */

Имея в наличии эти утверждения, необходимо лишь ввести правило, задающее отношение брат-сестра:

sister(Sister,Brothe
·r):-
female(Sister),
parents(Sister,Father,Mother),
parents(Brother,Father,Mother).









Программа "Родственники" содержит еще одно правило: предикат who_is_the_sister. who_is_the_sister является целью программы, ее единственным целевым утверждением. Это правило определяется в разделе утверждений программы clauses. Ввиду того, что цель задается в виде правила, точка входа раздела goal являет собой единственное целевое утверждение без подцелей. Тело правила состоит из двух частей. Первая часть - это правило sister. В качестве второй части - предпосылки - используется предикат write, который выводит полученные правилом sister результаты.
Правила в Турбо-Прологе записываются в разделе утверждений. Программа может содержать достаточно много правил, вырабатывающих различные заключения. Эффект введения правил точно такой же, как если бы программа содержала большое число утверждений-фактов. В программе "Родственники", например, можно в раздел clauses ввести еще ряд правил в дополнение к уже определенным. Правила можно будет активизировать выборочно путем использования их в целевой конструкции. Возможность Турбо-Пролога выбирать нужные правила делает программу более гибким и мощным инструментом. Важным непосредственным приложением данного средства программирования является возможность задания запросов в форме правил, а также возможность "запасать" эти правила для использования при дальнейшей работе с базой данных.

Задания

Модифицируйте программу "Родственники", введя правило определения имени брата. Цель изменений состоит в получении сообщения о том, что Виктор является братом Елены.
Модифицируйте программу, чтобы узнать имя сына. Используйте предикат who_is_the_son (Имя сына ).
15

Приложенные файлы

  • doc 10755835
    Размер файла: 74 kB Загрузок: 0

Добавить комментарий