Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Структура программы на Visual Prolog
Программа на Visual Prolog имеет следующую обобщенную структуру: domains /*... объявления доменов */ predicates /*... объявления предикатов */ clauses /*... предложения (правила и факты) */ goal /*... подцель _1, подцель _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 знаков). В именах предикатов нельзя использовать символы пробел, минус, звездочка, слэш. Объявление предиката имеет следующую форму: predicates predicateName(argumentTypel OptionalNamel, argumentType2 OptionalName2, <... >; argumentTypeN OptionalNameN) Здесь argument_type1,..., argument_typeN — либо стандартные домены, либо домены, объявленные в разделе domains. Объявление домена аргумента и описание типа аргумента — суть одно и то же. Имена аргументов OptionalNamel будут игнорироваться компилятором. В разделе domains объявляются любые нестандартные домены, используемые для аргументов предикатов. Домены в Прологе являются аналогами типов в других языках. Основные стандартные домены Visual Prolog: char, byte, short, ushort, word, integer, unsigned, long, ulong, dword, real, string И symbol. Основная форма объявления доменов имеет вид: domains myDomainl,..., myDomainN = < standardDomain> Форма объявления составных доменов имеет следующий вид: myDomainl,..., myDomainN = < compoundDomain_l>; < compoundDomain_2>; <... >; < compoundDoma i n_M> Домены позволяют задавать разные имена различным видам данных. В программах Visual Prolog объекты в отношениях (аргументы предикатов) принадлежат доменам, причем это могут быть как стандартные, так и описанные вами специальные домены. Раздел domains служит двум целям. Во-первых, можно задать доменам осмысленные имена, даже если внутренне эти домены аналогичны уже имеющимся стандартным. Во-вторых, объявление специальных доменов используется для описания структур данных, отсутствующих в стандартных доменах.
Таблица 1 - Основные стандартные предикаты
В разделе goal вы задаете внутреннюю цель программы; это позволяет программе быть скомпилированной, запускаться и выполняться независимо от среды визуальной разработки (VDE). Правила имеют форму: HEAD: - < Subgoall>, < Subgoal2>,..., < SubgoalN>. Для разрешения правила Пролог должен разрешить все его подцели, создав при этом соответствующее множество связанных переменных. Если же одна из под целей ложна, Пролог возвратится назад и просмотрит альтернативные решения предыдущих подцелей, а затем вновь пойдет вперед, но с другими значениями переменных. Этот процесс называется поиск с возвратом. Оператор Пролога: - (if) отличается от if, используемых в других языках: правило Пролога работает в соответствии с условной формой тогда/если, тогда как этот оператор в других языках работает в соответствии с условной формой если/тогда. Пролог всегда ищет решение, начиная с первого факта и/или правила, и просматривает весь список фактов и/или правил до конца. Механизм логического вывода Пролога берет условия из правила (тело правила) и просматривает список известных фактов и правил, пытаясь удовлетворить условиям. Если все условия истинны, то зависимое отношение (заголовок правила) считается истинным. Если все условия не могут быть согласованы с известными фактами, то правило ничего не выводит. Переменные в Прологе инициализируются при сопоставлении с константами в фактах или правилах. До инициализации переменная свободна; после присвоения ей значения она становится связанной. Переменная остается связанной только то время, которое необходимо для получения решения по запросу, затем Пролог освобождает ее и ищет другое решение. Нельзя сохранить информацию, присвоив значение переменной. Переменные используются как часть процесса поиска решения, а не как хранилище информации. Анонимные переменные позволяют " привести в порядок" наши программы. Если вам нужна только определенная информация запроса, можно использовать анонимные переменные для игнорирования ненужных значений. В Прологе анонимные переменные обозначаются символом подчеркивания (_). Анонимная переменная может быть использована на месте любой другой перемен ной и ей никогда не присваивается значение. Хорошим стилем программирования является включение в программу комментариев, объясняющих все то, что может быть непонятно кому-то другому (или даже вам, спустя полгода). Если вы подберете подходящие имена для переменных, предикатов и доменов, то вам понадобится меньше комментариев, т. к. программа будет объяснять себя " сама". Многострочные комментарии должны начинаться с символов /* (косая черта, звездочка) и завершаться символами */ (звездочка, косая черта). Для установки одно строчных комментариев можно использовать либо эти же символы, либо начинать комментарий символом процента (%). /* Это первый пример комментария */ % Это второй пример комментария А эти три строчки — пример многострочного комментария /*Вы также можете поместить комментарий Visual Prolog /*внутри комментария */ как здесь*/
|