Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 4 Тема - использование правил в запросах

Работа добавлена на сайт samzan.net:


                      Лабораторная работа №4

Тема : использование правил в запросах.

Цель: научиться строить запросы, содержащие правила,ознакомиться с отрицанием предиката в Прологе.

.

                      Теоретические сведения.

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

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

  Например:

Фрэнк и Мэри являются мужем и женой. Их сына зовут Сэмом, а дочку - Дебби. Ниже приведен небольшой диалог, касающийся этой семьи.

Вопрос: Кем приходятся друг другу Дебби и Сэм ?

Ответ: Дебби - сестра Сэма.

Вопрос: Из чего Вы это заключили ?

Ответ : У Дебби и Сэма одни и те же родители, Дебби - де вочка. Таким образом, Дебби - сестра Сэма.

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

Это правило можно перефразировать таким образом:

Дебби - сестра Сэма, если

   Дебби - существо женского пола,

   и родители Дебби есть родители Сэма.

  Фраза включает в себя условие "если" (if), который логически связывает оба утверждения. Утверждение, предшествующее "если" называется заключением или логическим следствием, а утверждение, следующее за "если" - допущением или предпосылкой.

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

  male("Frank").  /* Фрэнк - мужского пола */

  male("Sam").   /* Сэм - мужского пола */

  female("Mary").  /* Мэри - женского пола */

  female("Debbie"). /* Дебби - женского пола */

  parents("Sam","Frank","Mary").

  /* Родители Сэма есть Фрэнк и Мери */

  parents("Debbie","Frank","Mary").

  /* Родители Дебби есть Фрэнк и Мери */

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

   sister(Sister,Brother) if

   female(Sister),

   parents(Sister,Father,Mother),

   parents(Brother,Father,Mother).

  Отметим, что в формулировке правила нет никаких данных о конкретной семье; объекты Sister, Brother, Father и Mother являются переменными.  Двойное  использование  предиката parents устанавливает логическую связь между переменными Sister и Brother. Наличие предиката female позволяет выбрать ребенка женского пола. Три предиката предпосылки правила вполне достаточны для получения нужного заключения. Программа "Родственники" (листинг 1) является конечной программой на Прологе, демонстрирующей использование перечисленных фактов и правила sister.

  

Листинг 1

 domains

  person = symbol

 predicates

  male(person)

  female(person)

  parents(person,person,person)

  sister(person,person)

  who_is_the_sister

 goal

  who_is_the_sister

 clauses

  /* факты */

  male("Frank").

  male("Sam").

  female("Mary").

  female("Debbie").

  parents("Sam","Frank","Mary").

  parents("Debbie","Frank","Mary").

  /* правила */

  who_is_the_sister if

   sister(Sister,Brother),

   write(Sister,

 " is the sister of ",

 Brother,

 "."),

   nl.

sister(Sister,Brother) if

   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 if

   son(parents,_,_),

   male(Son),

   write("The son is ",Son,"."),nl.

  Это правило можно поместить в раздел clauses и заменить этим правилом целевое утверждение. Когда при запуске программы новое правило будет испытано, на экране появится надпись "The son is Sam".

Отрицание

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

  border(country,country)

  Тот факт, что "Германия и Франция имеют общую границу", можно представить в виде утверждения

  border("France", "Germany").

  Франция с Германией имеют общую границу, так же как и Франция с Испанией, и Франция с Италией.

  Шесть утверждений задают все возможные пары четырех выбранных европейских стран:

  euro_pair("France","Germany").

  euro_pair("France","Spain").

  euro_pair("France","Italy").

  euro_pair("Germany","Spain").

  euro_pair("Germany","Italy").

  euro_pair("Spain","Italy").

  Утверждения для стран с общей границей выглядят так:

  border("France","Germany").

  border("France","Spain").

  border("France","Italy").

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

Отрицание предиката border задается при помощи предиката not:

  not(border(Country1,Country2)).

  

Этот предикат выдает все пары не граничащих друг с другом стран.

           Задания к работе и порядок ее выполнения.

1. Введите программу "Родственники" и запустите ее на счет. Модифицируйте программу, введя правило определения имени брата. Цель изменений состоит в получении сообщения о том, что Сэм является братом Дебби.

2. Модифицируйте программу, ведя правило определения имени тети (дяди, бабушки, дедушки, прабабушки, кузена и т.п.-по запросу преподавателя) и добавив необходимые домены,предикаты,утверждения.

3. Напишите программу "Подбор партнера", использовав правило для отыскания имени высокого мужчины, блондина, владельца спортивного автомобиля.  Она содержит сведения о 7 мужчинах по параметрам: рост, цвет волос, класс машины. Единственным доменом программы является домен man.

4. Напишите программу "Пары стран Европы" (Германия, Франция, Италия, Испания), которая выдает все пары не граничащих друг с другом стран.

             Содержание отчета.

1. Цель работы.

2. Задания .

3.Программы и результат их выполнения. 

    




1. Свойства МБТОсобенности лабораторной диагностики
2. Мечети Египта
3. тематичних наук Львів ' 2002 Дисертацією є рукопис
4. МОСКВАСИТИ ПРОДОЛЖАЕТСЯ Голос России Экономическая Линия 14.html
5. Омский государственный педагогический университет Факультет психологии и педагогики Кафедра общей п
6. The pinted veil which those who live cll Life
7. Обязательство и ответственность субъектов предпринимательской деятельности
8. 201 г
9. Тема- Використання засобів оптимізації у середовищі MS Excel
10. Юность короля Генриха IV Манн Генрих.html
11. ФИЛОСОФИЯ ДЛЯ СТУДЕНТОВ Государственный образовательный стандарт ФГОС3 предполагает изучение дисци
12. Говядина тушеная Свинина тушеная Баранина тушеная Завтрак туриста свиной и говяжий и др.
13. Сибирский государственный медицинский университет Министерства здравоохранения РОссийской Федерации
14. Нариси з історії української етнології Розділ 1
15. Тема 12 Основы бухгалтерского учета в кредитных организациях
16. Методологічні та біологічні проблеми біонік
17. Внешняя политика России в XVII веке
18. Она всетаки ушла в клубахахах 4 мама будет рада 5 бесполезная трата нервов Почему так мало сердечек к
19.  Рішенням облради створено курорт місцевого значення Миргородські лікувальні водиrdquo; та затверджено п
20. Отан ордені Отан ордені 1993 жылы та~айындал~ан