Как работать в Visual Prolog

      Комментарии к записи Как работать в Visual Prolog отключены

Помечено: ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 8 мес., 3 нед. назад.

  • Автор
    Сообщения
  • #3255

    Цель работы: ознакомление с основами среды логического программирования Visual Prolog.

    Установка Visual Prolog

    Скачать Visual Prolog 5.2.
    32-х разрядная версия Visual Prolog 5.2 для Windows была установлена на 64х разрядный компьютер с операционной системой OpenSUSE 42.1, при этом использовался Wine 1.8.4. Процесс установки ничем не отличается от установки под Windows, при клике по установщику автоматически запускается Wine и процесс установки продолжается в обычном режиме.

    Создание проекта в Visual Prolog

    После установки системы, запускаем Visual Prolog и создаем проект. В появившемся окне вводим имя проекта и путь к нему.
    visual_prolog_create_project_1

    Затем нужно перейти во вкладку Target и выбрать консольный режим (Textmode), т. к. наше приложение будет консольным:
    visual_prolog_create_project_2

    Нажимает кнопку Create, после этого будет открыто рабочее окно системы, в левой части которого отобразится структура проекта. Проект содержит файл parents.pro с исходным кодом.
    visual_prolog_create_project_3

    Разработка программы в Visual Prolog

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

    Открываем файл parents.pro, приступаем к написанию исходного кода. Нам требуется создать базу родственных отношений между именами. Опишем тип имени в секции domains:

    domains
    	name = symbol

    В данном случае записано, что name является эквивалентом типа данных symbol. В свою очередь symbol — это символьный тип данных, элементами которого могут являться как строки (например, «Ilia», «Elena»), заключенные в кавычки, так и любые идентификаторы, начинающиеся со строчной буквы (например marina, ira и т. п.).

    Опишем отношение базы данных, задающее родство двух имен:

    database
    	parent(name, name)

    Теперь можно добавлять элементы во внутреннюю базу данных. Сделать это можно в секции clauses:

    clauses
    	parent(ilia, marina).
    	parent(marina, ira).
    	parent(elena, ivan).
    	parent(nikolay, ira).
    	parent(olga, aleksei).
    	parent(marina, sasha).
    	parent(sergei, ivan).

    Первый запрос, который мы реализуем, должен проверять, что «Марина является родителем Саши». Запросы описываются в секции goal:
    visual_prolog_code_1

    Для запуска цели нажимает комбинацию Ctrl+g, программа запускается и начинает свое выполнение с секции goal. В появившемся окне можем наблюдать результат работы программы. Выводится yes, т. к. утверждение является верным для описанных в базе фактов:
    visual_prolog_result_1

    Следующее утверждение, которое проверим «Алексей является родителем Ольги» — ложно, т. к. в базе нет факта parent(aleksei, olga). Запишем этот запрос в секции goal и убедимся, что результат — no:

    visual_prolog_code_2
    В запросе «Кто является ребенком Николая» нужно использовать анонимную переменную (ее имя начинается с большой буквы), т. к. имя ребенка неизвестно. Интерпретатор попробует подобрать все возможные решения, сопоставив эту переменную с каждым значением базы данных. В результате он сообщит нам, что ребенок Николая — Ира:
    visual_prolog_result_2

    Несмотря на то, что пролог в предыдущем запросе перебирал все возможные варианты, был получен только один ответ, т. к. у Николая других детей нет. Однако, в запросе «Кто родители Ивана» мы получим несколько решений:
    visual_prolog_result_4

    При определении всех родителей и их детей мы используем две анонимных переменных в запросе (т. к. ни конкретные родители, ни дети нам заранее не известны). В результате будет выведено все содержимое нашей базы данных:
    visual_prolog_result_5

    Более подробно про работу с базами данных в Prolog.

    Выводы по работе в Visual Prolog:

    1. получены навыки работы в среде Visual Prolog 5.2;
    2. на примерах исследован механизм поиска с возвратами. В рассмотренных нами примерах видно, что интерпретатор пролога выполняет поиск всех решений, при этом последний пример показывает, что данные базы данных обрабатываются в том порядке, в котором они были описаны в коде. Мы можем задавать в программе различные цели, соответствующие нашим требованиям, при этом будет выполняться поиск в базе и выдаче результатов подобно тому, как это происходит в реляционных базах данных.

Для ответа в этой теме необходимо авторизоваться.