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

Программа, написанная на Прологе, состоит из пяти основных разделов: раздел описания доменов, раздел базы данных, раздел описания предикатов, раздел описания предложений и раздел описания цели. Ключевые слова 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 до -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.

number=integer

name, person=symbol.

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

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

Что за язык программирования Пролог такой? Душкин объяснит

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

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

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

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

mother (symbol, symbol)

father (symbol, symbol).

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

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

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

Читайте также:
Программа для настройки принтера чеков

Использование списков

Список – это упорядоченный набор объектов одного и того же типа. Элементами списка могут быть целые числа, действительные числа, символы, строки, символические имена и структуры. Порядок расположения элементов в списке играет важную роль: те же самые элементы списка, упорядоченные иным способом, представляют уже совсем другой список.

Совокупность элементов списка заключается в квадратные скобки ([]), элементы друг от друга отделяются запятыми. Список может содержать произвольное число элементов, единственным ограничением является объем оперативной памяти. Количество элементов в списке называется его длиной. Список может содержать один элемент и даже не содержать ни одного элемента. Список, не содержащий элементов, называется пустым или нулевым списком.

Непустой список можно рассматривать как список, состоящий из двух частей: головы – первого элемента списка; и хвоста – остальной части списка. Голова является элементом списка, хвост является списком. Голова списка – это неделимое значение, хвост представляет собой список, составленный из того, что осталось от исходного списка в результате «отделения головы».

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

Операция деления списка на голову и хвост обозначается при помощи вертикальной черты (|):

Head здесь является переменной для обозначения головы списка, переменная Tail обозначает хвост списка (для имен головы и хвоста списка пригодны любые допустимые Прологом имена). Данная операция также присоединяет элемент в начало списка, например, для того, чтобы присоединить X к списку S следует написать [X | S].

Отличительной особенностью описания списков является наличие звездочки (*) после имени домена элементов.

Пример 6: объявление списков, состоящих из элементов стандартных типов доменов или типа структуры.

list1=integer*

list3=string*

list5=symbol*

personal_library = book (title, author, publisher, year)

list6= personal_library*

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

Пример 7: демонстрация разделения списков на голову и хвост.

Список Голова Хвост
[1, 2, 3, 4, 5] 1 [2, 3, 4, 5]
[6.9, 4.3] 6.9 [4.3]
[cat, dog, horse] Cat [dog, horse]
[‘S’, ‘K’, ‘Y’] ‘S’ [‘K’, ‘Y’]
[«PIG»] «PIG» []
[] Не определена Не определен

Источник: cyberpedia.su

Структура программы на Visual Prolog

Программа на Visual Prolog имеет следующую обобщенную структуру:

domains /*.

predicates /*.

clauses /*.

предложения (правила и факты) */

goal /*.

подцель _2, и т. д. */

В разделе clauses вы размещаете факты и правила, с которыми будет работать Visual Prolog, пытаясь разрешить цель программы.

Программы на языке Пролог состоят из двух типов фраз: фактов и правил, называемых предложениями.

— Факты — это отношения или свойства, о которых известно, что они имеют значение «истина».

Факты имеют общий вид:

property(objectl, object2. objectN)

relation(objectl, object2. objectN)

— Правила — это связанные отношения; они позволяют Прологу логически вы водить одну порцию информации из другой. Правило принимает значение «истина», если доказано, что заданный набор условий является истинным.

Правилаимеют общую форму заголовок:- тело, которые выглядят так:

relation(object,object. object):-relation(object. object), relation(obj ect. obj ect).

Прологе все правила имеют 2 части: заголовок и тело, разделенные специальным знаком:-.

— Тело — это ряд условий, которые должны быть истинными, чтобы Пролог мог доказать, что заголовок правила истинен.

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

Различия между этими понятиями несущественны, и, поэтому, часто используется обобщенный термин отношение.

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

predicateName(argumentTypel OptionalNamel, argumentType2 OptionalName2, <. >; argumentTypeN OptionalNameN)

Читайте также:
Diskview что показывает данная программа

Здесь argument_type1. argument_typeN — либо стандартные домены, либо домены, объявленные в разделе domains. Объявление домена аргумента и описание типа аргумента — суть одно и то же. Имена аргументов OptionalNamel будут игнорироваться компилятором.

В разделе domains объявляются любые нестандартные домены, используемые для аргументов предикатов. Домены в Прологе являются аналогами типов в других языках. Основные стандартные домены Visual Prolog: char, byte, short, ushort, word, integer, unsigned, long, ulong, dword, real, string И symbol.

Основная форма объявления доменов имеет вид:

Форма объявления составных доменов имеет следующий вид:

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

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

Таблица 1 — Основные стандартные предикаты

Домен Описание и реализация
short Короткое, знаковое, количественное. Все платформы 16 бит (-32 768-32 767)
ushort Короткое, беззнаковое, количественное, Все платформы 16 бит (0—65 535)
long Длинное, знаковое, количественное, Все платформы 32 бит (-2 147 483 648-2 147 483 647)
ulong Длинное, беззнаковое, количественное, Все платформы 32 бит (0-4 294 967 295)
integer Знаковое, количественное, имеет платформо-зависимый размер, Платформы 16 бит (-32 768-32 767), Платформы 32 бит (-2 147 483 648-2 147 483 647)
unsigned Беззнаковое, количественное имеет платформо-зависимый размер. Платформы 16 бит (0—65 535) Платформы 32 бит (0-4 294 967 295)
byte Все платформы 8 бит (0— 55)
word Все платформы 16 бит (0-65 535)
dword Все платформы 32 бит (0-4 294 967 295)
char Символ, реализуемый как беззнаковый byte. Синтаксически это символ, заключенный между двумя одиночными кавычками: ‘ а’
real Число с плавающей запятой, реализуемое как 8 байт в соответствии с соглашением IEEE; эквивалентен типу double в С. Синтаксически числа с необязательным знаком (+ или -), за которым следует несколько цифр DDDDDDD, затем необязательная десятичная точка (.) и еще цифры ddddddd, за которыми идет необязательная экспоненциальная часть (е(+ или -)ddd): <+|->DDDDD <.>DDDDDDD DDD> Примеры действительных чисел (real): 42705. 9999. 86.72 9111.929437521е238. 79.83е+21 Здесь 79.83е+21 означает 79.83х10 21 , как и в других языках. Допустимый диапазон чисел: от 1×10″» 307 до 1х10 +зое (от 1е-307 до 1е+308). При необходимости, целые автоматически преобразуются в real
string Последовательность символов, реализуемых как указатель на байтовый массив, завершаемый нулем, как в С. Для строк допускается два формата: 1. Последовательность букв, цифр и символов подчеркивания, причем первый символ должен быть строчной буквой. 2. Последовательность символов, заключенных в двойные кавычки.
symbol Последовательность символов, реализуемых как указатель на вход в таблице идентификаторов, хранящей строки идентификаторов. Синтаксис — как для строк

В разделе goal вы задаете внутреннюю цель программы; это позволяет программе быть скомпилированной, запускаться и выполняться независимо от среды визуальной разработки (VDE).

Правила имеют форму:

Для разрешения правила Пролог должен разрешить все его подцели, создав при этом соответствующее множество связанных переменных. Если же одна из под целей ложна, Пролог возвратится назад и просмотрит альтернативные решения предыдущих подцелей, а затем вновь пойдет вперед, но с другими значениями переменных. Этот процесс называется поиск с возвратом.

Оператор Пролога:- (if) отличается от if, используемых в других языках: правило Пролога работает в соответствии с условной формой тогда/если, тогда как этот оператор в других языках работает в соответствии с условной формой если/тогда.

Пролог всегда ищет решение, начиная с первого факта и/или правила, и просматривает весь список фактов и/или правил до конца.

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

Переменные в Прологе инициализируются при сопоставлении с константами в фактах или правилах. До инициализации переменная свободна; после присвоения ей значения она становится связанной. Переменная остается связанной только то время, которое необходимо для получения решения по запросу, затем Пролог освобождает ее и ищет другое решение. Нельзя сохранить информацию, присвоив значение переменной. Переменные используются как часть процесса поиска решения, а не как хранилище информации.

Читайте также:
Кто обрабатывает данные в соответствии с заданной программой

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

Хорошим стилем программирования является включение в программу комментариев, объясняющих все то, что может быть непонятно кому-то другому (или даже вам, спустя полгода). Если вы подберете подходящие имена для переменных, предикатов и доменов, то вам понадобится меньше комментариев, т. к. программа будет объяснять себя «сама».

Многострочные комментарии должны начинаться с символов /* (косая черта, звездочка) и завершаться символами */ (звездочка, косая черта). Для установки одно строчных комментариев можно использовать либо эти же символы, либо начинать комментарий символом процента (%).

/* Это первый пример комментария */ % Это второй пример комментария

А эти три строчки — пример многострочного комментария

/*Вы также можете поместить комментарий Visual Prolog /*внутри комментария */ как здесь*/

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:

Источник: studopedia.ru

Структура программы на языке prolog. Представление о логическом программировании

18. структура программы на языке prolog. Представление о логическом программировании. Представление знаний о предметной области в виде фактов и правил базы знаний prolog’a.

Prolog- это язык программирования, который предназначен для обработки символьной нечисловой информации, и особенно хорошо он приспособлен для решения задач, в которых фигурируют объекты и отношения между ними. Отличия prologa от других языков:

Традиционные языки программирования остаются языками типа «КАК», язык prolog порывает с традициями языков типа «КАК» поскольку он определенным образом направляет программистское мышление, заставляя программиста давать определение ситуаций и формулировать задачи вместо того, чтобы во всех деталях расписывать решение этих задач. Традиционные языки программирования являются процедурно-ориентированными. Язык prolog основан на описательной или декларативной точке зрения. Декларативный смысл определяет что должно быть результатом работы программы в то время как процедурный смысл определяет как этот результат может быть получен.

Области применения prolog:

— Быстрая разработка прототипов (макетов) в упрощенной версии(для любых задач)

— проверка различных теорий для доказательства теорем, стратегий искусственного интеллекта

— конструирование встроенных экспертных систем и оболочек экспертных систем

— построение пакетов для работы с символьной информацией для решения уравнений, дифференцирования и интегрирования

— разработка приложений для баз данных

— планирование и составление расписаний, проектов, учебных планов, программ.

1. DOMAINS/*определение данных*/

Этот раздел определяет типы данных, используемых в программе. Содержимое его может отсутствовать.

2. PEDICATES /*определение предикатов*/

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

3. CLAUSES /*определение фактов и правил */

Это основной раздел программы, в нем определяются факты и правила.

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

Имена переменных должны начинаться с прописной буквы и могут содержать только буквы и цифры или знак подчеркивания. Одиночным знаком _ будем обозначать анонимные переменные.

Определяется цель. Цель может состоять из несложных подцелей.

Если в начале строки стоит %, то все что идет до конца строки — это комментарий.

Пример: дерево родственных отношений

Тот факт, что Иван является родителем Петра на prolog будет записан так:

Отношение между мужчина и женщина унарные, отношение родитель — бинарные.

мать (х,у):родитель (х,у), женщина (х).

вопросы : родитель (х, нина) родитель (ольга, х) родитель (x.v)

% программа дерево родственных отношений

родитель (s,s) женщина (s) мужчина (s)

Источник: vunivere.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru