Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Набор, редактирование и тестирование простейших программ в режиме Test Goal

Поиск

Программа на ПРОЛОГе состоит из предложений, которые могут быть фактами, правилами или запросами. Как правило, программа состоит из четырех разделов.

DOMAINS – секция описания доменов(типов). Секция применяется, если в программе используются нестандартные домены.

PREDICATES – секция описания предикатов. Секция применяется, если в программе используются нестандартные предикаты.

CLAUSES – секция предложений. Именно в этой секции записываются предложения: факты и правила вывода.

GOAL – секция цели. В этой секции записывается запрос.

Среда Visual Prolog позволяет протестировать программу без создания проекта. Для этого используется утилита Test Goal. Достаточно создать новый файл, набрать текст программы и активизировать Test Goal нажатием кнопки <G> на панели инструментов. Автономно исполняемый файл при этом не создается. Утилита Test Goal компилирует только тот код, который определен в активном окне редактора (код в других открытых окнах или модулях проектов, если они есть, игнорируются). Test Goal находит все возможные решения задачи и автоматически выводит значения всех переменных.

 

Пример 1.

Имеется база данных, содержащая следующие факты:

родитель(илья, марина).

родитель(марина, ира).

родитель(елена, иван).

родитель(николай, ира).

родитель(ольга, алексей).

родитель(марина, саша).

родитель(сергей, иван).

Определить:

1) верно ли, что Марина является родителем Саши;

2) верно ли, что Алексей является родителем Ольги;

3) кто является ребенком Николая;

4) кто родители Ивана;

5) всех родителей и их детей.

Решение.

1. Запустите среду Visual Prolog. Закройте окно проекта (если оно открыто) и откройте новый файл (File|New) (рис.2)

В появившемся окне наберите текст программы, содержащий разделы: PREDICATES (описание предиката родитель), CLAUSES (перечисляются имеющиеся факты) и GOAL (запрос).


рис.2. Рабочее окно редактора

DOMAINS

имя=string

PREDICATES

nondeterm родитель(имя, имя)

CLAUSES

родитель(илья, марина).

родитель(марина, ира).

родитель(елена, иван).

родитель(николай, ира).

родитель(ольга, алексей).

родитель(марина, саша).

родитель(сергей, иван).

GOAL

родитель(марина, саша).

 

Запустите и протестируйте программу с помощью команды Project | Test Goal (можно использовать кнопку на панели инструментов <G> или сочетание клавиш <Ctrl>+<G>). Результат выполнения программы будет выведен в отдельном окне

рис3. Окно вывода результата

Указание: перед следующим запуском программы следует закрыть это окно.

 

2. Для ответа на вопрос: верно ли, что Алексей является родителем Ольги, измените запрос:

GOAL

родитель(алексей, ольга).

После запуска программы (Project | Test Goal) будет получен ответ:

no


3. Для ответа на вопрос: кто является ребенком Николая, запишите цель:

GOAL

родитель(николай, X).

Результат:

X=ира

1 Solution

 

4. Для ответа на вопрос: кто родители Ивана, укажите запрос:

GOAL

родитель(X, иван), родитель(Y, иван), X<>Y.

 

Результат:

X=елена, Y=сергей

X=сергей, Y=елена

2 Solutions

 

5. Для определения всех родителей и их детей, запишите:

GOAL

родитель(X, Y).

Результат:

X=илья, Y=марина

X=марина, Y=ира

X=елена, Y=иван

X=николай, Y=ира

X=ольга, Y=алексей

X=марина, Y=саша

X=сергей, Y=иван

7 Solutions

Пример 2

Имеются факты вида: родитель(имя, имя) и женщина(имя).

а) составить правило мать и определить, кто мать Маши.

Решение:

DOMAINS

имя=string

PREDICATES

родитель(имя, имя)

женщина(имя)

мать(имя,имя)

CLAUSES

родитель("Марина","Ирина").

родитель("Елена", "Анна").

родитель("Ольга","Марина").


родитель("Ольга","Татьяна").

родитель("Татьяна","Катя").

родитель("Анна", "Маша").

женщина("Ольга").

женщина("Маша").

женщина("Ирина").

женщина("Елена").

женщина("Анна").

женщина("Марина").

женщина("Татьяна ").

женщина("Катя").

мать(X,Y):-родитель(X,Y),женщина(X).

GOAL

мать(X,"Маша").

Результат:

X=Анна

1 Solution

 

b) составить правило бабушка и определить, кто бабушка Маши.

Решение:

DOMAINS

имя=string

PREDICATES

nondeterm родитель(имя,имя)

женщина(имя)

nondeterm мать(имя,имя)

nondeterm бабушка(имя,имя)

CLAUSES

родитель("Марина","Ирина").

родитель ("Елена", "Анна").

родитель("Ольга","Марина").

родитель("Ольга","Татьяна").

родитель("Татьяна","Катя").

родитель ("Анна", "Маша").

женщина("Ольга").

женщина("Маша").

женщина("Ирина").

женщина("Елена").

женщина("Анна").

женщина("Марина").

женщина("Татьяна ").

женщина("Катя").

мать(X,Y):-родитель(X,Y),женщина(X).

бабушка(X,Z):-мать(X,Y),родитель(Y,Z).

GOAL

бабушка(X,"Маша").


Результат:

X=Елена

1 Solution

 

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

 

c) составить правило внучка и определить, сколько внучек у Ольги и как их зовут.

Решение:

DOMAINS

имя=string

PREDICATES

nondeterm родитель(имя,имя)

женщина(имя)

nondeterm мать(имя,имя)

nondeterm бабушка(имя,имя)

nondeterm внучка(имя,имя)

CLAUSES

родитель("Марина","Ирина").

родитель ("Елена", "Анна").

родитель("Ольга","Марина").

родитель("Ольга","Татьяна").

родитель("Татьяна","Катя").

родитель("Анна", "Маша").

женщина("Ольга").

женщина("Маша").

женщина("Ирина").

женщина("Елена").

женщина("Анна").

женщина("Марина").

женщина("Татьяна ").

женщина("Катя").

мать(X,Y):-родитель(X,Y),женщина(X).

бабушка(X,Z):-мать(X,Y),родитель(Y,Z).

внучка(X,Y):-бабушка(Y,X),женщина(X).

GOAL

внучка(X, "Ольга").

Результат:

X=Ирина

X=Катя

2 Solutions


ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

1. Имеется база данных, содержащая следующие факты:

любит(“Aнна,” яблоки).

любит(“Сергей”, бананы).

любит(“Андрей”, яблоки).

любит(“Света”, шоколад).

любит(“Вова”, шоколад).

любит(“Анна”, шоколад).

любит(“Света”, апельсины).

любит(“Вова”, бананы).

Составить программу, определяющую:

a) всех, кто любит бананы;

b) кто любит и шоколад, и яблоки;

c) что любит Вова;

d) что любят и Света, и Вова.

2. Имеется база данных, содержащая следующие факты:

играет (“Саша”, футбол).

играет (“Катя”, теннис).

играет (“Саша”, теннис).

играет (“Андрей”, футбол).

играет (“Олег”, футбол).

играет (“Ольга”, теннис).

играет (“Катя”, волейбол).

играет (“Олег”, волейбол).

Составить программу, определяющую:

a) каким видом спорта увлекается Андрей;

b) всех, кто играет в волейбол;

c) каким видом спорта увлекаются и Ольга, и Саша;

d) кто увлекается и футболом, и волейболом.

3. Имеется база данных, содержащая следующие факты:

любит(“Aнна,” яблоки).

любит(“Сергей”, бананы).

любит(“Андрей”, яблоки).

любит(“Света”, шоколад).

любит(“Вова”, шоколад).

любит(“Анна”, шоколад).

любит(“Света”, апельсины).

любит(“Вова”, бананы).

фрукты(яблоки).

фрукты(бананы).

фрукты(апельсины).

конфеты(шоколад).

a) используя имеющиеся факты, составить новое правило люб_фрукты (Х) и определить всех, кто любит фрукты;


b) используя имеющиеся факты, составить новое правило люб_конфеты (Х) и определить всех, кто любит конфеты;

c) используя имеющиеся факты, составить правило люб_вкусное ) и определить всех, кто любит и фрукты, и конфеты.

4. Имеется база данных, содержащая следующие факты:

играет (“Саша”, футбол).

играет (“Катя”, теннис).

играет (“Саша”, теннис).

играет (“Андрей”, футбол).

играет (“Олег”, футбол).

играет (“Ольга”, теннис).

играет (“Катя”, волейбол).

играет (“Олег”, волейбол).

женщина(“Катя”).

женщина(“Ольга”).

мужчина(“Саша”).

мужчина(“Андрей”).

мужчина(“Олег”).

a) используя имеющиеся факты, составить новое правило волейбол_жен(Х) и определить всех женщин, играющих в волейбол;

b) используя имеющиеся факты, составить новое правило футбол_муж(Х) и определить всех мужчин, играющих в футбол;

c) используя имеющиеся факты, составить правило теннис_пара(Х,Y), позволяющее найти смешанную теннисную пару (мужчина+женщина). Определить все такие пары.

 

Отчет о выполненной самостоятельной работе должен содержать:

1) тему лабораторной работы;

2) условие задачи;

3) листинг программы;

4) результаты ее тестирования.



Поделиться:


Последнее изменение этой страницы: 2016-04-08; просмотров: 555; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.39.85 (0.011 с.)