Язык логического программирования Visual Prolog. Учебное пособие. Информационное обеспечение, программирование.

Язык логического программирования Visual Prolog. Учебное пособие. Информационное обеспечение, программирование.




💣 👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻


























































Информационное обеспечение, программирование

Вы можете узнать стоимость помощи в написании студенческой работы.


Помощь в написании работы, которую точно примут!

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

Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе

Нужна качественная работа без плагиата?

Не нашел материал для своей работы?


Поможем написать качественную работу Без плагиата!

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


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


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


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




Таблица 1.
Синтаксис логики предикатов




Билл любит машину, если машина красивая

На Прологе
описываются объекты ( objects ) и отношения ( relations ), а затем описывает правила
( rules ), при которых эти отношения являются истинными. Например, предложение


Билл любит собак. (Bill likes dogs.)


устанавливает
отношение между объектами Bill и dogs (Билл и собаки); этим отношением является likes (любит). Ниже
представлено правило, определяющее, когда предложение "Билл любит
собак" является истинным:


Билл любит собак, если собаки хорошие. (Bill likes dogs if the dogs are nice.)


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


Ниже
представлено несколько предложений на естественном языке с отношением
"любит" (likes):


Билл любит Синди. (Bill
likes Cindy)


Синди любит Билла.
(Cindy likes Bill)


Билл любит собак. (Bill likes dogs)


А теперь
перепишем эти же факты, используя синтаксис Пролога:


Факты, помимо
отношений, могут выражать и свойства. Так, например, предложения естественного
языка "Kermit is green" (Кермит зеленый) и "Caitlin is girl" (Кейтлин —
девочка) на Прологе, выражая те же свойства, выглядят следующим образом:


Отношение в
Прологе называется предикатом. Аргументы — это объекты, которые
связываются этим отношением; в факте


отношение likes — это предикат, а
объекты bill и cindy — аргументы.


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


В примере
показано, что предикаты могут вовсе не иметь аргументов.




Правила
позволяют вам вывести один факт из других фактов. Другими словами, можно
сказать, что правило — это заключение, для которого известно, что оно
истинно, если одно или несколько других найденных заключений или фактов являются
истинными. Ниже представлены правила, соответствующие связи "любить"
(likes):


Синди любит все, что любит Билл. (Cindy likes everything that Bill likes)


Кейтлин любит все зеленое. (Caitlin likes everything that is green)


Используя эти
правила, вы можете из предыдущих фактов найти некоторые вещи, которые любят
Синди и Кейтлин:


Синди любит Синди. (Cindy likes Cindy)


Кейтлин любит Кермит. (Caitlin likes
Kermit)


Чтобы
перевести эти правила на Пролог, вам нужно немного изменить синтаксис:


likes(cindy,
Something):- likes (bill, Something). ilikes(caitlin, Something):- green
(Something) .


Символ :-
имеет смысл "если", и служит для разделения двух частей правила:
заголовка и тела. Можно рассматривать правило и как процедуру. Другими словами, правила


likes(cindy,
Something):- likes (bill, Something).


likes(caitlin, Something):- green
(Something).


означают: "Чтобы
доказать, что Синди любит что-то, докажите, что Билл любит это " и
" Чтобы доказать, что Кейтлин любит что-то, докажите, что это что-то зеленое" .
С такой "процедурной" точки зрения правила могут
"попросить" Пролог выполнить другие действия, отличные от
доказательств фактов, например, напечатать что-нибудь.




Описав в
Прологе несколько фактов, можно задавать вопросы, касающиеся отношений между
ними. Это называется запросом (query) системы языка Пролог. Можно задавать Прологу
такие же вопросы, которые мы могли бы задать вам об этих отношениях.
Основываясь на известных, заданных ранее фактах и правилах, вы можете ответить
на вопросы об этих отношениях, в точности так же это может сделать Пролог. На
естественном языке мы спрашиваем: Does Bill like Cindy ? (Билл любит Синди?) По правилам Пролога мы
спрашиваем:


Получив такой
запрос, Пролог ответит:


потому что
Пролог имеет факт, подтверждающий, что это так. Немного усложнив вопрос, можно
спросить на естественном языке: What does Bill like ? (Что любит Билл?) По правилам Пролога мы
спрашиваем:


Необходимо
отметить, что второй объект — What -начинается с большой буквы, тогда как первый
объект — bill — нет. Это происходит потому, что bill — фиксированный,
постоянный объект — известная величина, a What — переменная.


Переменные
всегда
начинаются с заглавной буквы или символа подчеркивания!


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


What does Cindy like? (Что любит Синди?)


поскольку
Пролог знает, что Синди любит Билла, и что Синди любит то же, что и Билл, и что
Билл любит Синди и собак.


Мы могли бы
задать Прологу и другие вопросы, которые можно задать человеку. Но вопросы типа
"Какую девушку любит Билл?" не получат решения, т. к. Прологу в
данном случае не известны факты о девушке, а он не может вывести заключение,
основанное на неизвестных данных: в этом примере мы не дали Прологу
какого-нибудь отношения или свойства, чтобы определить, являются ли какие-либо
объекты девушками.




Предположим,
есть следующие факты и правила:


Быстрая машина — приятная. (A fast car is fun).


Большая машина — красивая. (A big car is nice).


Маленькая машина —
практичная. (A little car is practical).


Биллу нравится машина, если она приятная.
(Bill likes a car if the car is fun).


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


Вот пример,
демонстрирующий, как Пролог использует правила для ответа на запросы.
Посмотрите на факты и правила в этой части программы ch02e01.pro:


likes (bill, Activity):-
likes (torn, Activity).


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


Биллу нравится занятие, если Тому
нравится это занятие. (Bill likes an activity if Tom likes
that activity)


В данном
правиле заголовок — это likes (bill, Activity), а тело — likes (torn, Activity). Заметим, что в этом
примере нет фактов о том, что Билл любит бейсбол. Чтобы выяснить, любит ли Билл
бейсбол, можно дать Прологу такой запрос:


Пытаясь отыскать
решение по этому запросу, Пролог будет использовать правило:


likes(bill, Activity):-
likes(torn, Activity).


Загрузите
программу ch02e01.pro в среду визуальной разработки Visual Prolog и запустите ее утилитой Test Goal .


likes(bill,Activity):-likes(torn,
Activity).


Утилита Test Goal ответит в окне
приложения:


Система
использовала комбинированное правило


likes(bill, Activity):-
likes(torn, Activity).


likes(torn, baseball).
для решения, что likes(bill, baseball).


Попробуйте
также следующий запрос в GOAL-разделе:


· 
нет
фактов, которые говорят, что Билл любит теннис;


· 
отношение
Билла к теннису не может быть логически выведено с использованием данного
правила и имеющихся в распоряжении фактов.


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




Синтаксис Visual Prolog разработан для того,
чтобы отображать знания о свойствах и взаимосвязях.


В отличие от
других версий Пролога, Visual Prolog — компилятор, контролирующий типы: для каждого
предиката объявляются типы объектов, которые он может использовать. Это
объявление типов позволяет программам Visual Prolog быть скомпилированными
непосредственно в машинные коды, при этом, скорость выполнения сравнима, а в
некоторых случаях — и превышает скорости аналогичных программ на языках С и Pascal.


Обычно
программа на Visual Prolog состоит из четырех основных программных разделов, к
которым относятся:


· 
раздел
clauses (предложений);


· 
раздел
predicates
(предикатов);


Раздел clauses — это сердце Visual Prolog-программы; именно в этот
раздел записываются факты и правила, которыми будет оперировать Visual Prolog, пытаясь разрешить цель
программы.


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


Раздел domains служит для объявления
доменов, не являющихся стандартными доменами Visual Prolog .


В раздел goal помещается цель Visual Prolog-программы.


В раздел clauses (предложений) помещаются
все факты и правила, составляющие программу. Все предложения для каждого
конкретного предиката в разделе clauses должны располагаться
вместе . Последовательность
предложений, описывающих один предикат , называется процедурой .


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




Если в
разделе clauses программы на Visual Prolog описан собственный предикат, то его необходимо
объявить в разделе predicates (предикатов). В результате объявления предиката сообщается,
к каким доменам (типам) принадлежат аргументы этого предиката.




Объявление предиката
начинается с имени этого предиката, за которым идет открывающая (левая) круглая
скобка, после чего следует ноль или больше доменов (типов) аргументов
предиката:


predicateName
(argument_typel OptionalNamel,


После каждого
домена (типа) аргумента следует запятая, а после последнего типа аргумента —
закрывающая (правая) скобка. В отличии от предложений в разделе clauses, декларация предиката
не завершается точкой . Доменами (типами) аргументов предиката могут быть
либо стандартные домены, либо домены, объявленные вами в разделе domains. Можно указывать имена
аргументов OptionalNameK — это улучшает читаемость программы, и не сказывается на
скорости ее исполнения, т. к. компилятор их игнорирует.


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


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


Аргументы
предикатов должны принадлежать доменам, известным Visual Prolog. Эти домены могут быть
либо стандартными, либо пользовательскими.




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


Иногда очень
полезно описать новый домен — особенно, когда вы хотите прояснить отдельные
части раздела predicates. Объявление собственных доменов, благодаря присваиванию осмысленных
имен типам аргументов, помогает документировать описываемые вами предикаты. Рассмотрим
пример, показывающий, как объявление доменов помогает документировать
предикаты:


Используя
стандартные домены, вы можете так объявить соответствующий предикат:


В большинстве
случаев такое объявление будет работать хорошо, но не наглядно для чтения
программы. Более правильным было бы следующее описание:


Одним из
главных преимуществ объявления собственных доменов является то, что Visual Prolog может отслеживать ошибки
типов, например, такие:


Несмотря на
то, что и name и sex описываются как symbol, они не эквивалентны друг другу. Это и позволяет
Visual Prolog определить ошибку, если
вы перепутаете их. Это полезно в тех случаях, когда ваши программы очень велики
и сложны.


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


Следующий
пример программы при его загрузке приведет к ошибке типа.


multiply_em(product,product,product)


multiply_em(X,Y,Product):-Product=X*Y.


Эта программа
выполняет две операции: складывает и умножает. Зададим ей следующую цель:


что является
суммой двух целых чисел, которые вы передали в программу.


С другой
стороны, эта же программа с помощью предиката multiply_em умножает два аргумента.
Допустим, мы хотим удвоить произведение 31 на 17. Задаем следующую цель:


multiply_em(31, 17, Sum), add_em_up(Sum, Sum, Answer).


и ждем, что Visual Prolog (Test Goal)
ответит:


Однако вместо
этого вы получите ошибку типа. Это случилось из-за того, что имела место
попытка передать результирующее значение предиката multiply_em, которое относится к
домену product, в качестве первого и второго аргументов (которые должны
относится к домену sum) в предикат add_em_up. И хотя оба эти домена соответствуют типу integer — это различные домены.


Если
переменная в предложении используется более чем в одном предикате, она должна
быть одинаково объявлена в каждом из них.


По существу,
раздел goal (цели) аналогичен телу правила: это просто список подцелей. Цель
отличается от правила лишь следующим:


· 
за
ключевым словом goal не следует :-;


· 
при
запуске программы Visual Prolog автоматически выполняет цель.


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




В Visual Prolog есть несколько
встроенных стандартных доменов. Их можно использовать при декларации типов
аргументов предикатов без описания в разделе domains.


Основные
стандартные домены перечислены в табл. 1.




Таблица 1.
Основные
стандартные домены




Все платформы 16 бит (-32 768—32 767)

Короткое, беззнаковое, количественное

Все платформы 32 бит (-2 147 483 648-2 147 483 647)

Длинное, беззнаковое, количественное

Все платформы 32 бит (0-4 294 967 295)

Знаковое, количественное, имеет платформо-зависимый

Платформы 32 бит (-2 147 483 648-2 147 483 647)

Беззнаковое, количественное, имеет платформо-зависимый размер

Платформы 16 бит (0—65 535) Платформы 32 бит (0-4 294 967 295)

Все платформы 32 бит (0—4 294 967 295)

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


Домены типов byte, word и dword наиболее удобны при
работе с машинными числами. В основном используются типы integer и unsigned, а также short и long (и их беззнаковые
аналоги) для более специализированных приложений.


В объявлениях
доменов ключевые слова signed и unsigned могут использоваться вместе со стандартными
доменами типов byte, word и dword для построения новых базовых доменов. Так:


создает новый
базовый домен в диапазоне от -128 до +127.


Другие
базовые домены показаны в табл. 2 [1] .




Таблица 2.
Основные
стандартные домены




Символ, реализуемый как беззнаковый byte.
Синтаксически это символ, заключенный между двумя одиночными кавычками: 'а'

Число с плавающей запятой, реализуемое как 8 байт в соответствии
с соглашением IEEE; эквивалентен типу double в С. При необходимости, целые автоматически
преобразуются в real

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

telephone_number
"railway ticket" "Dorid Inc"

Строки, которые пишутся в программе, могут достигать длины в 255
символов, в то время как строки, которые система Visual Prolog считывает из файла или
строит внутри себя, могут достигать (теоретически) до 4 Гбайт на 32-битных
платформах

Последовательность символов, реализуемых как указатель на вход в
таблице идентификаторов, хранящей строки идентификаторов. Синтаксис — как для
строк

Идентификаторы
и строки взаимозаменяемы в программе, однако Visual Prolog хранит их раздельно. Идентификаторы
хранятся в таблице идентификаторов, а для представления используются лишь
их индексы в этой таблице, но не сами строки идентификаторов. Это означает, что
сопоставление идентификаторов выполняется очень быстро, а в случае если они
встречаются в программе несколько раз, то и хранение их компактно. Строки же не
хранятся в поисковой таблице, и при необходимости сопоставления Visual Prolog проверяет их символ за
символом. Вы сами должны определять, какой домен лучше использовать в каждой
конкретной программе.


Объявление
доменов аргументов в разделе predicates называется заданием типов аргументов. Предположим,
имеется следующая связь объектов:


Факт Пролога,
соответствующий этому предложению естественного языка, может быть следующим:


Для того
чтобы объявить person (человек), как предикат с этими тремя аргументами, вы можете
разместить в разделе predicates следующую строку:


Здесь для
всех трех аргументов использованы стандартные домены. Отныне всякий раз при
работе с предикатом person, вы должны передавать ему три аргумента, причем первые два должны
быть типа symbol, а третий — типа integer.


Если в
программе используются только стандартные домены, то нет необходимости
использовать раздел domain; вы уже видели несколько программ такого типа.


Или,
предположим, что вы хотите описать предикат, который сообщал бы позицию буквы в
алфавите, т. е. цель


alphabet_position(Letter, Position)


должна
вернуть вам Position = 1, если Letter = a, Position = 2, если Letter = Ь и т. д. Предложения этого предиката могут
выглядеть следующим образом:


Если при
объявлении предиката используются только стандартные домены, то программе не
нужен раздел domains. Предположим, что вы хотите описать предикат так, что цель будет
истинна, если A_character является N-м символом алфавита.
Предложения этого предиката будут такими:


alphabet_position('а', 1). alphabet_position('b', 2).


Вы можете
объявить данный предикат следующим образом:


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


Ниже
представлено несколько простых целей, которые вы можете использовать:


Арность
предиката — это количество аргументов, которые он принимает. Вы можете иметь два
предиката с одним и тем же именем, но отличающейся арностью. В разделах predicates и clauses версии предикатов с
одним именем и разной арностью должны собираться вместе; за исключением этого
ограничения, различная арность всегда понимается как полное различие
предикатов. Проиллюстрируем это примером/


father(person, person)% первый
person является отцом другого


Правила
используются в Прологе в случае, когда какой-либо факт зависит от истинности
другого факта или группы фактов. Как мы объясняли ранее в этой главе, в правиле
Пролога есть две части: заголовок и тело. Ниже представлен обобщенный синтаксис
правила в Visual Prolog:


HEAD: - , , ...,
.


Заголовок: — <Подцель>,
<Подцель>, ... , <Подцель>.


Тело правила
состоит из одной или более подцелей. Подцели разделяются запятыми, определяя
конъюнкцию, а за последней подцелью правила следует точка.


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


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


Как
упоминалось выше, в качестве разделителя заголовка и тела правила Пролог
использует знак:-, который читается как "если" (if). Однако if Пролога отличается от if, написанного в других
языках, например в Pascal, где условие, содержащееся в операторе if, должно быть указано
перед телом оператора, который может быть выполнен. Другими словами:


если ЗАГОЛОВОК истинен, тогда ТЕЛО
истинно (или: тогда выполнить ТЕЛО


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


ЗАГОЛОВОК истинен, если ТЕЛО — истинно
(или: если ТЕЛО может Сыть выполнено).


Учитывая
вышесказанное, правило Пролога соответствует условной форме тогда/если ( then / if ).


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


· 
между
строками (string) и идентификаторами (symbol);


· 
между
целыми, действительными и символами (char). При преобразовании символа в числовое значение
этим значением является величина символа в коде ASCII.


Аргумент из
домена my_dom, который объявлен следующим образом:


my_dom = % — это стандартный домен


может
свободно смешиваться с аргументами из этого основного домена и с аргументами
всех совместимых с ним стандартных доменов. Если основной домен — string, то с ним совместимы
аргументы из домена symbol; если же основной домен integer, то с ним совместимы домены real, char, word и др. Такое
преобразование типов означает, например, что вы можете:


· 
вызвать
предикат с аргументами типа string, задавая ему аргументы типа symbol, и наоборот;


· 
передавать
предикату с аргументами типа real параметры типа integer;


· 
передавать
предикату с аргументами типа char параметры типа integer;


· 
использовать
в выражениях и сравнениях символы без необходимости получения их кодов в ASCII.


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




Теперь, когда
вы ознакомились с такими разделами программ Visual Prolog, как clauses, predicates, domains и goal, поговорим о некоторых
других, часто используемых разделах программ: facts, constants и различных глобальных (global) разделах.


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


Ключевое
слово facts объявляет раздел фактов. Именно в этой секции вы объявляете
факты, включаемые в динамическую базу данных. Отметим, что в ранних версиях Visual Prolog для объявления раздела
фактов использовалось ключевое слово database, т. е. ключевое слово facts — синоним устаревшего
ключевого слова database. В Visual Prolog есть несколько встроенных предикатов,
облегчающих использование динамических фактов.


В своих
программах на Visual Prolog вы можете объявлять и использовать символические константы.
Раздел для объявления констант обозначается ключевым словом constants, за которым следуют сами
объявления, использующие следующий синтаксис:


— имя символической
константы, а <макроопределение> — это то, что вы присваиваете этой
константе. Каждое <макроопределение> завершается символом новой строки и,
следовательно, на одной строке может быть только одно описание константы.
Объявленные таким образом константы могут позже использоваться в программах.


Рассмотрим
следующий фрагмент программы:


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


На
использование символических констант накладываются следующие ограничения:


· 
описание
константы не может ссылаться само на себя:


my_number = 2*my_number/2
% не допускается


· 
это
приведет к сообщению об ошибке "Recursion in constant definition" (Рекурсия в
описании константы);


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


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


· 
идентификаторы
констант являются глобальными и могут объявляться только один раз.
Множественное объявление одного и того же идентификатора приведи к сообщению об
ошибке "Constant identifier can only be declared once" (Идентификатор
константы может объявляться только один раз).


Visual Prolog поддерживает несколько директив
компилятора, которые можно добавлять в программу для сообщения компилятору
специальных инструкций по обработке вашей программы при ее компиляции. Кроме
этого, вы можете устанавливать большинство директив компилятора с помощью
команды меню среды визуальной разработки Visual Prolog Options / Project / Compiler Options .


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


Ниже приведен
пример того, как это делается.


1. 
Создаете
файл (например, MYSTUFF.PRO), в котором объявляете свои наиболее I часто используемые
предикаты (с помощью разделов domains и predicates) и даете их описание в разделе clauses.


2. 
Пишете
исходный текст программы, которая будет использовать эти процедуры.


3. 
В
"допустимых областях" исходного текста программы размещаете строку:include "mystuff.pro"


"Допустимые
области" — это любое место программы, в котором вы можете расположить декларацию
разделов domains, facts, predicates, clauses или goal.


При
компиляции исходных текстов программы Visual Prolog вставит содержание файла
MYSTUF
6.1.1   Предотвращение поиска с возвратом
к предыдущей подцели в правиле Учебное пособие. Информационное обеспечение, программирование.

Эссе по теме Идеи И. Канта сегодня
Дипломная Работа На Тему Сравнительный Анализ Методики Ознакомления С Равенствами, Неравенствами, Уравнениями В Традиционной Школе И Системе Развивающего Обучения
Реферат: Блюда из рубленного мяса
Реферат: Эрих Фромм - видный философ ХХ столетия. Скачать бесплатно и без регистрации
Реферат По Психологии Бесплатно
Курсовая работа: Последствия приватизации в России. Скачать бесплатно и без регистрации
Контрольная работа по теме Государственные органы Англии
Реферат Право На Землю
Американский Футбол Реферат
Forward 6 Контрольная Работа 1 Четверть
Сравните Екатерину И Варвару Сочинение Гроза
Реферат: Мещерская сторона
Контрольная работа: Цели дистанционного обучения. Методы управления временем. Трансакционые издержки
Реферат: Сравнительно-правовая характеристика положения, роли, влияния и этапов формирования партий и партийных систем стран Пиренейского Полустрова. Скачать бесплатно и без регистрации
Реферат по теме Ценностное мировоззрение современного слушателя рок-музыки
Сочинение По Литературе Капитанская Дочка Образ Маши
Контрольная работа по теме Статистико-экономический анализ производительности труда в животноводстве совхоза "Новый"
Реферат: Hate Crimes Essay Research Paper Hate Crimes
Реферат Банк И Банковская Деятельность
Реферат по теме Аудит поступления основных средств
Похожие работы на - Китай-город
ДТП по видам
Курсовая работа: Социальная роль мужчины. Вектор трансформации

Report Page