Для Visual Prolog 5.2 создавать проект необязательно.
Для Visual Prolog 7.3 создавать проект обязательно, причём в этом случае придётся переделать программу на Visual Prolog 5.2 под синтаксис Visual Prolog 7.3.
Создание консольного проекта
Запустите среду программирования Visual Prolog.
Создайте консольное приложение: Project → New → Console application (radio button).
Введите имя проекта на английском языке (в национальных алфавитах изредка бывают проблемы). Это же будет имя созданной EXE-программы.
Нажмите кнопку Ok. Будет создан консольный проект.
Запустите проект на выполнение кнопкой «Е» на панели инструментов (меню Buid → Execute).
Начнётся компиляции проекта. Первая компиляция будет идти долго, но следующие компиляции пройдут быстрее, так как будет перекомпилироваться только тот файл, в котором сделаны изменения.
После компиляции проект будет запущен выполнение. Если это был просто «пустой» проект, то на экране быстро появится и закроется окно консоли, так как в коде нет никаких действий, кроме инициализации консоли.
Урок 2. Простая программа на Visual Prolog
Откройте исходный код проекта main.pro. Определён один предикат run, который инициализирует консоль:
implement main open core constants className = «main». classVersion = «». clauses classInfo(className, classVersion). clauses run():- console::init(), /* инициализация консоли */ succeed(). % place your own code here end implement main goal mainExe::run(main::run).
Для задержки закрытия окна можно вывести на экране строку («Hello World») и далее вставим предикат ввода строки (он будет ждать нажатия Enter).
run():- console::init(), % инициализация консоли console::write(«Hello World!»),% вывод строки _ = console::readLine(). % пауза, ожидания ввода строки с Enter
Чтобы консольное окно не закрывалось, можно запустить проект из меню: Build → Run in Window (Alt-F5). В этом случае Visual Prolog создаёт BAT-файл (Capdos.bat) типа:
«C:Visual Prolog 6helloExehello.exe» pause
Недостаток этого способа — надо всегда запускать BAT-файл, а не EXE-файл.
В папке EXE находятся готовые файлы проекта:
Источник: verim.org
Определение отношений в программе
Для того чтобы создать консольное приложение в системе Visual Prolog следует войти в среду разработки и выбрать команду меню Project > New. В открывшемся диалоговом окне Project Settings в поле Project Name следует вписать имя проекта (например, chapter1), в поле Project Kind следует указать Console application. После нажатия кнопки Finish или Next создается проект (рис. 1.3) (при нажатии кнопки Next появляется окно установки дополнительных параметров).
Построить проект можно с помощью команды меню Build > Build (или кнопки B панели инструментов), скомпилировать — команды Build > Compile (или кнопки C панели инструментов). Всякий раз, когда система будет спрашивать о добавлении директивы include , можно просто отвечать Add All.
Урок 1. Установка Visual Prolog 5.2 и разработка программы HelloWorld
увеличить изображение
Рис. 1.3. Диалоговое окно Project Settings
Факты базы данных поместим в отдельный модуль. Для этого выделим корень дерева проекта и выберем команду меню File > New In New Package. Появится окно Create Project Item. Cлева выберем элемент Text File, в поле Name напишем имя family, а в поле Parent Directory впишем слово Exe (рис. 1.4).
Рис. 1.4. Диалоговое окно Create Project Item
Нажмем кнопку Create. В результате в директории Exe проекта будет создан файл family.txt. Этот файл можно открыть из дерева проекта.
Откроем файл и поместим в него факты базы данных (см. листинг 1.3).
clauses parent(«Иван», «Мария»). parent(«Анна», «Мария»). parent(«Мария», «Павел»). parent(«Мария», «Петр»). parent(«Мария», «Елизавета»). spouse(«Иван», «Анна»). spouse(«Павел», «Юлия»). male(«Иван»). male(«Павел»). male(«Петр»). female(«Мария»). female(«Анна»). female(«Елизавета»). female(«Юлия»).
Пример 1.3. Файл family.txt. База данных
Код программы, приведенной ниже (листинг 1.4), нужно поместить в файл main.pro (в имплементацию класса main).
Язык Visual Prolog — типизированный, поэтому предикаты необходимо объявлять. В объявлении предиката указывается его имя, ставится знак двоеточия, а затем в круглых скобках через запятую перечисляются имена доменов (типов данных) аргументов:
class facts — relatives parent: (string Родитель, string Ребенок).
Словом relatives обозначено имя базы данных. В объявлениях предикатов можно использовать комментарии специального вида. Слова Родитель и Ребенок в этом объявлении обозначают комментарии. Компилятор их игнорирует.
Такие комментарии пишутся в одно слово с прописной буквы.
Предикаты объявляются в разделах class facts (если определяются только в виде фактов) или class predicates , а определяются в разделе clauses. Цель программы формулируется в разделе goal , который находится в файле main.pro. Обычно в разделе goal только вызывается некоторый предикат, который используется для составления запросов. В данном примере и всюду далее таким предикатом является run .
Раздел open имплементации класса main следует изменить следующим образом:
open core, console
После добавления имени класса в раздел open предикаты этого класса можно использовать без указания имени этого класса, например, вместо console::write писать просто write . Предикат write используется для вывода на печать своих аргументов, которых может быть произвольное конечное число.
class facts — relatives parent: (string Родитель, string Ребенок). spouse: (string Муж, string Жена). male: (string). female: (string). class predicates father: (string Отец, string Ребенок) nondeterm anyflow. mother: (string Мать, string Ребенок) nondeterm (o,o). clauses father(X, Y):- parent(X, Y), male(X). mother(X, Y):- parent(X, Y), female(X). run():- init(), file::consult(«family.txt», relatives), father(X, Y), write(«отец — «, X, «, ребенок — «, Y), nl, fail; mother(X, Y), write(«мать — «, X, «, ребенок — «, Y), nl, fail; if father(«Иван», «Петр») then write(«nИван является отцом Петра») else write(«nИван не является отцом Петра») end if, _ = readLine().
Пример 1.4. Консольный проект «Родственные отношения»
Вывод решений для запроса, например для цели , организуется с помощью предиката fail . Этот предикат имеет значение ложь. Он вынуждает программу вернуться для поиска других решений. Его можно заменить любым ложным условием, например, 0 = 1 . Когда перебор заканчивается, выполняется переход к подцели, стоящей после знака дизъюнкции «;». Для задания частного вопроса используется конструкция if-then-else-end if.
Ключевое слово nondeterm в объявлении предиката означает, что область истинности этого предиката может содержать более одного элемента или не содержать ни одного (см. п. 3.4). Ключевое слово anyflow означает, что некоторые аргументы предиката могут быть как входными, так и выходными. Последовательность (o,o) означает, что оба аргумента предиката — выходные, они возвращают некоторые значения (см. п. 3.5).
Предикат init инициализирует консоль, предикат consult загружает факты базы данных из файла в оперативную память. Программа обращается с ними так же, как если бы они были приведены в разделе clauses, вместе с другими предложениями.
Для ввода и вывода в консоли используются буфер ввода и буфер вывода, соответственно. Предикат clearInput очищает буфер ввода, предикат clearOutput очищает буфер вывода. Предикат readLine считывает содержимое буфера ввода в строку (string) и при этом полностью очищает содержимое этого буфера. В данном случае программа просто ожидает ввода любого символа.
Как создавать консольные приложения, описано также в [15] (дополнительно см. пример Visual Prolog Examples > _tutorial > family 1).
Источник: intuit.ru
Листинг программы на Visual Prolog 5.1(vp):
После запуска системы создаем консольный проект: открываем Project/Newи вProjectSettingустанавливаем имя проекта. Автоматически создается подкаталог с таким же именем как и название проекта. Выбираем консольное приложение (рис.5.1 и рис.5.2). Остальные опции можно не менять.
Нажимаем ок. Рис. 5.1
Рис. 5.2 Для начала работы, нам нужно выполнить компиляцию текущего проекта. Выберите из меню BuildпозициюBuild. Пустой проект, который ничего не делает, будет построен. (В этот момент времени никаких сообщений о ошибках в окнеMessagesбыть не должно).
Рис. 6 Теперь у нас появился файл main.pro(рис.7).
Рис. 7 Открываем его и здесь пишем свой код программы.
Структура программы
В отличие от VP5.1 структура программы состоит из 8-разделов: implement, open, constants, domains, class facts, class predicates, clauses и goal. implement и end implement Это ключевые слова, используемые парно. Visual Prolog рассматривает код, помещенный между этими ключевыми словами, как код, принадлежащий одному классу. За ключевым словом implement обязательно должно следовать имя класса.
open Это ключевое слово используется для расширения области видимости класса. Оно должно быть помещено вначале кода класса, сразу после ключевого слова implement. constants Это ключевое слово исползуется для обозначения секции кода, котора определяет неоднократно используемые значения, применяемые в коде.
Например, если строковый литерал «PDC Prolog» предполагается использовать в различных местах кода, тогда можно единожды определить мнемоническое (краткое, легко запоминаемое слово) для использовани в таких местах: constantspdc=»PDC Prolog». Заметьте, что определение константы завершается точкой (.).
В отличие от переменных Пролога константы должны начинаться со строчной буквы (нижний регистр). domains Это ключевое слово используется для обозначения секции, объявляющей домены, которые будут использованы в коде. Синтаксис таких объявлений позволяет порождать множество вариантов объявлений доменов, используемых в тексте программы.
class facts Это ключевое слово представляет секцию, в которой объявляются факты, которые будут в дальнейшем использоваться в тексте программы. Каждый факт объявляется как имя, используемое для обозначения факта, и набор аргументов, каждый из которых должен соответствовать либо стандартному (предопределенному), либо объявленному домену.
class predicates Эта секция содержит объявления предикатов, которые определяются в тексте программы в разделе clauses. И опять, объявление предиката — это имя, которое присваивается предикату, и набор аргументов, каждый из которых должен соответствовать либо стандартному (предопределенному), либо объявленному домену.
clauses Среди всех разделов, существующих в тексте программ на Visual Prolog, это единственный раздел, который близко совпадает с традиционными программами на Прологе. Он содержит конкретные определения объявленных в разделе class predicates предикатов, причем синтаксически им соответствующие. goal Этот раздел определяет главную точку входа в программу на языке системы Visual Prolog.
После написания кода программы, нам нужно снова выполнить компиляцию текущего проекта. Выберите из меню BuildпозициюBuild. Если ошибок не возникает, то можем запусить проект из меню Build /RuninWindows.
Источник: studfile.net