Структура программы на языке Пролог

Программа, написанная на Прологе, состоит из пяти основных разделов: раздел описания доменов, раздел базы данных, раздел описания предикатов, раздел описания предложений и раздел описания цели. Ключевые слова domains, constants, database (facts), predicates, clauses и goal отмечают начала соответствующих разделов. Назначение этих разделов таково:

· раздел domains содержит определения доменов, которые описывают различные типы данных, используемых в программе;

· раздел constants используется для объявления символических констант, используемых в программе;

· раздел database (facts) содержит описания предикатов внутренней базы данных Пролога, если программа такой базы данных не требует, то этот раздел может быть опущен;

· раздел predicates служит для описания предикатов, не принадлежащих внутренней базе данных;

· в раздел clauses заносятся факты и правила самой программы;

· в разделе goal на языке Пролог формулируется назначение создаваемой программы. Составными частями при этом могут являться некие подцели, из которых формируется единая цель программы.

В Visual Prolog разрешает объявление разделов domains, facts, predicates, clauses как глобальных разделов, то есть с ключевым словом global.

Пролог имеет следующие встроенные типы доменов:

 

Тип данных Ключевое слово Диапазон значений Примеры использования
Символы char Все возможные символы ‘a’, ’b’, ‘#’, ‘B’, ‘%’
Целые числа integer byte word dword От –32768 до 32767 От 0 до 255 От 0 до 65535 От 0 до 232 -63, 84, 2349
Действительные числа real short ushort long ulong unsigned От +1E-307 до +1E308 16 битов со знаком 16 битов без знака 32 бита со знаком 32 бита без знака 16 или 32 бита без знака 360, - 8324, 1.25E23, 5.15E-9
Строки string Последовательность символов (не более 250) «today», «123», «school_day»
Символические имена symbol 1.Последовательность букв, цифр, символов подчеркивания; первый символ – строчная буква. 2. Последовательность любых символов, заключенная в кавычки. flower, school_day «string and symbol»
Ссылочный тип ref    
Файлы file Допустимое в DOS имя файла mail.txt, LAB.PRO

Если в программе необходимо использовать новые домены данных, то они должны быть описаны в разделе domains.

Пример 4:

domains

number=integer

name, person=symbol.

Различие между symbol и string - в машинном представлении и выполнении, синтаксически они не различимы.

Visual Prolog выполняет автоматическое преобразование типов между доменами string и symbol. Однако, по принятому соглашению, символическую строку в двойных кавычках нужно рассматривать как string, а без кавычек – как symbol:

Symbol - имена, начинающиеся с символа нижнего регистра и содержащие только символы, цифры, и символы подчеркивания.

String – в двойных кавычках могут содержать любую комбинацию символов, кроме #0, который отмечает конец строки.

Visual Prolog поддерживает и другие типы стандартных доменов данных, например, для работы с внешними БД или объектами.

Предикаты описываются в разделе predicates. Предикат представляет собой строку символов, первым из которых является строчная буква. Предикаты могут не иметь аргументов, например «go» или «repeat». Если предикаты имеют аргументы, то они определяются при описании предикатов в разделе predicates:

Пример 5:

predicates

mother (symbol, symbol)

father (symbol, symbol).

Факты и правила определяются в разделе clauses, а вопрос к программе задается в разделе goal – в этом случае цель называется внутренней целью. Программа на Турбо-Прологе может не содержать раздел goal, в этом случае цель задается в процессе работы программы и является внешней целью. Для задания внешней цели в окне Dialog будет выведено приглашение Goal. После удовлетворения внешней цели программа на Турбо-Прологе не заканчивает свою работу, а просит ввести следующую цель, таким образом можно задать программе несколько различных целей. Если цель в программе является внутренней целью, то процесс вычисления остановится после первого ее успешного вычисления. Если цель в программе является внешней целью, то процесс вычисления цели повторяется до тех пор, пока не будут найдены все успешные способы вычисления цели.

В Visual Prolog раздел goal в тексте программы является обязательным. Разница в режимах исполнения программы состоит в разном использовании утилиты Test Goal. Если утилита создается для запуска любой программы, то при этом ищутся все решения, если утилита создается для автономного запуска программы – то ищется одно решение.