Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Создание простейших программ




Лабораторная работа 7. Создание простейших программ, проектов в Visual Prolog

Цель работы

1. Изучить основы синтаксиса языка Пролог.

2. Выработать навыки работы с интерактивной системой Visual Prolog.

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

Создание простейших программ

Prolog является языком, основанным на программировании логики (PROgramming in LOGic). Вместо детальных инструкций, предписывающих как решать ту или иную задачу, программист на языке Prolog уделяет основное внимание описанию задачи.

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

Visual Prolog автоматизирует построение сложных процедур и освобождает программиста от выполнения тривиальных операций. С помощью Visual Prolog проектирование пользовательского интерфейса и связанных- с ним окон, диалогов, меню, линии уведомлений о состояниях и т.д. производится в графической среде. С созданными объектами сразу же могут работать различные Кодовые Эксперты (Code Experts), которые используются для генерации базового и расширенного кодов на языке Prolog, необходимых для обеспечения их функционирования.

В Visual Prolog входят интерактивная среда визуальной разработки (VDE — Visual Develop Environment), которая включает текстовый и различные графические редакторы, инструментальные средства генерации кода, конструирующие управляющую логику (Experts), а также являющийся расширением языка интерфейс визуального программирования (VPI — Visual Programming Interface), Пролог-компилятор, набор различных подключаемых файлов и библиотек, редактор связей, файлы, содержащие примеры и помощь.

Visual Prolog поддерживается различными ОС, в том числе MS-DOS PharLap-Extended DOS, всеми версиями Windows, 16- и 32-битовыми целевыми платформами OS/2, а также некоторыми другими системами, требующими графического пользовательского интерфейса.

В зависимости от выбранного интерфейса разработчику обеспечивается доступ к множеству генераторов кода (Code Expert), всевозможным ресурсным редакторам и особым дополнительным VPI-предикатам, определениям и библиотекам. Ресурсные редакторы применяются для создания, компоновки и редактирования окон, диалогов, меню, панелей инструментов, строк помощи, строковых таблиц, ярлыков, курсоров, битовых карт и оперативной помощи. Генераторы кода на основе подобных структур создают необходимый первичный Prolog-код. В результате появляется первичный код («скелет»), готовый для компиляции, редактирования связей и выполнения.

Интерфейс Visual Prolog включает: главное меню, панель инструментов, окно проекта. Если во время последнего использования системы Visual Prolog там был открытый проект, то система автоматически вновь откроет этот проект.

На рис.1 изображен внешний вид среды Visual Prolog после запуска. В окне проекта отображаются модули открытого проекта route.prj: karta.pro, route.pro, VPITools.pro.

 

кнопки для работы с компонентами проекта
компоненты проекта

рис.1. Среда разработки Visual Prolog 6.1

 

Левая панель кнопок в окне проекта позволяет выбирать нужный компонент проекта: модуль, окно, меню и т.д. С помощью кнопок правой панели выбранный компонент можно редактировать(кнопка Edit), удалять(кнопка Delete), а также добавлять новый(кнопка New).

Пункт меню File содержит команды для работы с файлами. Чтобы создавать новое окно редактирования, можно использовать команду File - New. Эта команда создаст новое окно редактора с заголовком "NONAME".

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

Пункт меню Project содержит команды для работы с проектом: создать новый, открыть, запустить и т.д. Запуск проекта на исполнение выполняется нажатием кнопки <R> на панели инструментов (или F9, или с помощью команд меню Project - Run).

Команды меню Options позволяют выполнять настройку проекта, устанавливать необходимые параметры.

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

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...