В данном разделе предлагается познакомиться с визуальной средой разработки Visual Prolog версии 7.3, разработчиком которой является компания Prolog Development Center (PDC). Visual Prolog представляет собой полноценную программную среду, состоящую из среды визуальной разработки, которая включает текстовый и различные графические редакторы, автоматические средства генерации кода, интерфейс визуального программирования VPI (Visual Programming Interface), Пролог-компилятор, набор различных подключаемых файлов и библиотек. Последнюю версию системы Visual Prolog 7.3 с типом лицензии personal edition (только для частного использования) можно бесплатно скачать с официального сайта компании PDC http://www.visual-prolog.com/.

Отметим некоторые отличия между традиционным Прологом и Visual Prolog.

Visual Prolog предоставляет возможности структуризации программ с использованием файлов различного типа.

Программа системы Visual Prolog может поддерживать функционирование, располагающееся в различных модулях, с использованием концепции идентификация пространств.

Программа на языке Visual Prolog может быть написана как объектно-ориентированная программа с использованием классических свойств объектно-ориентированной парадигмы.

Перед написанием кода для раздела clause в Visual Prolog необходимо объявить все используемые предикаты, константы, домены в соответствующих разделах (predicates,constants, domain).

Структура на Visual Prolog ранее была рассмотрена в разделе 2.1, здесь мы напомним основные моменты. И так, программа на Visual Prolog, представляемая кодом, разделяется ключевыми словами на секции разного вида путем использования ключевых слов. Например, есть ключевые слова, обозначающие различие между декларациями определениями предикатов и доменов. Обычно каждой секции предшествует ключевое слово. Ключевых слов, обозначающих окончание секции, нет. Наличие другого ключевого слова обозначает окончание предыдущей секции и начало другой.

Исключением из этого правила являются ключевые слова implement и end implement. Код, содержащийся между этими ключевыми словами, есть код, который относится к конкретному классу.

Здесь предлагается рассмотреть небольшую часть ключевых слов.

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

В этом руководстве используются следующие ключевые слова:

implement и end implement

Среди всех ключевых слов, обсуждаемых здесь, это единственные ключевые слова, используемые парно. Visual Prolog рассматривает код, помещенный между этими ключевыми словами, как код, принадлежащий одному классу.

За ключевым словом implement обязательно должно следовать имя класса.

Например:

implement myClass

Ключевое слово open используется для расширения области видимости класса. Оно должно быть помещено в начале кода класса, сразу после ключевого слова implement.

Например:

open console

Указание расширение области видимости с помощью open для класса console, дает возможность использование предикатов из этого класса без квалификатора «::», в противном случае его необходимо использовать.

Ключевое слово constants используется для обозначения секции кода, которая определяет неоднократно используемые значения, применяемые в коде. Например, если строковый литерал "PDC Prolog" предполагается использовать в различных местах кода, тогда можно единожды определить мнемоническое (краткое, легко запоминаемое слово) для использования в таких местах:

constants

pdc="PDC Prolog".

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

Ключевое слово domains используется для обозначения секции, объявляющей домены, которые будут использованы в коде. Синтаксис таких объявлений позволяет порождать множество вариантов объявлений доменов, используемых в тексте программы. Некоторые варианты объявления были рассмотрены в разделе 2.1.

class facts

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

class predicates

Ключевое слово class predicates представляет секцию, которая содержит объявления предикатов используемые в тексте программы в разделе clauses. Напомним, что объявление предиката – это имя, которое присваивается предикату, и набор аргументов, каждый из которых должен соответствовать либо стандартному (предопределенному), либо объявленному домену.

Среди всех разделов, существующих в тексте программ на Visual Prologclauses это единственный раздел, который близко совпадает с традиционными программами на Прологе. Он содержит конкретные определения объявленных в разделе class predicates предикатов.

goal

Раздел goal определяет главную точку входа в программу на языке системы Visual Prolog. Рассмотрим этот раздел более детально.

В традиционном Прологе, как только какой-либо предикат определен в тексте, Пролог-системе может быть предписано выполнение программы, начиная с этого предиката. В Visual Prolog это не так. Будучи компилятором, он отвечает за генерацию эффективного исполняемого кода написанной программы. Этот код исполняется не в то же время, когда компилятор порождает код. Поэтому компилятору надо знать заранее точно, с какого предиката начнется исполнение программы. Благодаря этому, когда программа вызывается на исполнение, она начинает работу с правильной начальной точки. Как можно уже догадаться, откомпилированная программа может работать независимо от компилятора Visual Prolog и без участия среды IDE.

Файловое структурирование программ

Необходимость помещения всех частей большой программы в один файл, несомненно, является неудобством. Это ведет к тому, что программа становится нечитаемой, что также порой затрудняет поиск ошибок. Visual Prolog предусматривает возможность деления текста программы на отдельные файлы, используя среду IDE (Integrated Development Environment), и, кроме того, IDE позволяет помещать логически связанные фрагменты текста программы в отдельные файлы. Несмотря на такое разделение программы на части, сущности, находящиеся в общем использовании, доступны.

Например, если имеется домен, который используется несколькими файлами, то объявление домена делается в отдельном файле и к этому файлу из других файлов существует доступ.

Расширение области видимости

В Visual Prolog текст программы разделен на отдельные части, каждая часть определяется как класс (class). В объектно-ориентированных языках программирования класс – это пакет кода и ассоциированные с ним данные. Visual Prolog каждый класс обычно помещается в отдельный файл.

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

Visual Prolog позволяет делать такие взаимные ссылки на предикаты или данные, используя так называемую концепцию области видимости (scope access). Для полной ясности, рассмотрим эту ситуации на примере.

Предположим, что имеется предикат, с именем p1 определенный в классе, с именем class1(который размещается в другом файле), необходимо этот предикат вызвать в теле clause некоторого другого предиката p2, находящегося в другом классе class2. Такое обращение можно организовать следующим образом:

clauses

  p3:-

    ...

    !.

  p2:- class1::p1,

  p3,

В приведенном примере видно, что тело правила предиката p2 вызывает два предиката: p1 и p3. Предикат p1 неизвестен в этом файле, поэтому для обращения к предикату p1 требуется квалификатор класса class1::, но т.к. предикат p3 определен внутри того же самого файла, что и предикат p2,таким образом нет необходимости использовать квалификатора class2:: перед вызовом p3. Такое поведение связано с определением области видимости для предиката p3, который находится в той же области (в файле) что и предикат p2, поэтому здесь не нужно указывать на то, что эти два предиката находятся в одном классе, это будет определено компилятором автоматически.

Область видимости класса может быть расширена использованием ключевого слова open. Это ключевое слово информирует компилятор о том, что в этот класс должны быть добавлены имена (предикатов / констант / доменов), которые были определены в других файлах. Если область видимости расширена, то необходимости использования квалификатора класса (с двойным двоеточием) нет.

open class1

...

clauses

p3:-    ...    !.

p2:-    p1

p3,

...

Здесь квалификатор "class1::" больше не нужен, поскольку область видимости расширена с помощью ключевого слова 'open'

Visual Prolog является полностью объектно-ориентированным языком. Весь код, который разрабатывается для программы, помещается в класс.