Методические указания к выполнению контрольных, курсовых работ По дисциплине Интеллектуальные информационные системы icon

Методические указания к выполнению контрольных, курсовых работ По дисциплине Интеллектуальные информационные системы


Смотрите также:
Методические указания к выполнению лабораторных работ по дисциплине «Интеллектуальные...
Методические указания к выполнению контрольных работ по дисциплине “...
Методические указания по выполнению курсовых работ: Курсовая работа...
Методические указания по выполнению контрольных и курсовых работ по дисциплине «Теория...
Методические рекомендации по выполнению курсовых и контрольных работ по дисциплине...
Методические указания по выполнению, представлению и защите курсовых работ для специальности...
Тематика курсовых работ курсовая работа по плану не предусмотрена тематика контрольных работ...
Тематика курсовых работ курсовая работа по плану не предусмотрена тематика контрольных работ...
Маркетинг методические указания к выполнению контрольных и курсовых работ для студентов...
Тематика курсовых работ темы курсовых работ Импортирование...
Методические указания к выполнению контрольных, курсовых работ По дисциплине Базы данных...
Методические указания к выполнению контрольных, курсовых работ По дисциплине Базы данных...



Загрузка...
страницы:   1   2
скачать


ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение

высшего профессионального образования

Тихоокеанский государственный университет


Институт экономики и управления

Кафедра Экономической кибернетики


Методические указания к выполнению контрольных, курсовых работ


По дисциплине Интеллектуальные информационные системы


Для специальности 080801.65 «Прикладная информатика в экономике»

очной и заочной форм обучения


Методические указания разработаны в соответствии с составом УМКД


Методические указания разработала Серебрякова Т.А._____________


Методические указания утверждены на заседании кафедры,

протокол № ______ от «___» _______________ 2010г.

Зав. кафедрой _________ «___» ______________ 2010г. Пазюк К.Т.


Интеллектуальные информационные системы: тематика и методические указания к выполнению контрольных, курсовых работ для студентов специальности «Прикладная информатика в экономике» очной и заочной форм обучения / сост. Т.А.Серебрякова. – Хабаровск, 2010. – 34 с.


Рецензент: Пазюк К.Т., доктор философских наук, профессор


Содержание


I Цели и задачи дисциплины 5

1 Требования к уровню освоения содержания дисциплины 5

II. Содержание дисциплины 6

III. Методические указания к выполнению курсовой работы 27

Общие положения 27

Оформление работы 28

Подбор и изучение литературных источников 30

IV. Варианты контрольных работ 31

VII. Библиографический список 33

1 Рекомендуемая литература 33

Рекомендуемая литература 33

Приложение 1 35

Образец оформления титульного листа курсовой работы 35
^

I Цели и задачи дисциплины


Основной целью дисциплины «Интеллектуальные информационные системы» является формирование у будущих специалистов практических навыков по проектированию и эксплуатации систем искусственного интеллекта с применением современных методов и технологий программирования, обучение работе с научно- технической литературой и технической документацией по программному обеспечению компьютеров.

Данная дисциплина обеспечивает приобретение студентами знаний, умений и навыков по "Интеллектуальные информационные системы" в соответствии с государственным образовательным стандартом (ГОС) высшего профессионального образования по специальности 351400 "Прикладная информатика (по областям)". Она входит в цикл специальных дисциплин специальности.

Дисциплина "Интеллектуальные информационные системы" является теоретическим и прикладным фундаментом для изучения дисциплин специальности 351400, связанных с обработкой информации при мониторинге, анализе, прогнозировании и управлении в экономике и юриспруденции. Знания, умения и навыки, полученные студентами при качественном освоении курса "Интеллектуальные информационные системы" могут использоваться ими при изучении других учебных дисциплин, а также при разработке курсовых и дипломных работ.

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

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

1 Требования к уровню освоения содержания дисциплины


В результате обучения по данной дисциплине студенты должны:

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

– приобрести практические умения и навыки при решении задач.

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

  • Теория вероятностей;

  • Математическая статистика;

  • Алгоритмические языки программирования;

  • Теория систем и системный анализ;

  • Базы данных;

  • Информационные технологии;

  • Разработка и стандартизация программных средств и информационных технологий;

  • Информационный менеджмент.
^

II. Содержание дисциплины




1.Логические основы работы системы Пролог-Д.



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

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

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

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

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

1.Примерами констант могут быть:

1, 2, 33, 14565 - числовые константы;

ав, АНТ25, ПРОЛОГ - литеральные константы.

2.Примерами переменных могут быть:

x, y, z, X, ы, Й.

3.Примерами функций могут быть:

автор(Толстой, Казаки), Сумма(2,3).

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

Терм - это переменные, константы и функции вида:

f(t 1,t 2,...,t n), (t 1,t 2,...,t n )  Dn

где каждое ti - терм, а f - n-арный функциональный символ или функтор. (арность - это число аргументов). Особенность функции в том, что она принимает значение элемента предметной области Dn , или иными словами представляет собой некоторое отображение совокупности из n (n - ки) элементов из предметной области в элемент предметной области.

Отношения, определяемые над объектами, отличаются от функций. Отношение определяет совокупность элементов из предметной области и представляет собой отображение из D n в множество {ИСТИНА, ЛОЖЬ}. Например, отношение мама(x, y) определяет совокупность пар (x, y), таких, что элементы множества людей x и y находятся в отношении родства мама. Множество пар (x, y) это множество матерей и детей. В математической логике отношениям даются имена, называемые предикатными символами, а сами отношения называются предикатами в последнем примере предикатный символ-мама.

Более строго понятие предиката можно сформулировать следующим образом:

Предикат - это выражение вида P(t1,t2,...,tm),

где каждое ti - терм, а P - m-арный предикатный символ. Формально предикат P(t1,t2,...,tm) можно читать либо как "m - ка (t1,t2,...,tm) принадлежит отношению Р", либо как высказывание Р справедливо для m-ки (t1,t2,...,tm).

В логике имеется набор связок: &, , ¬, <- , <->, которые читаются как "и", "или", "не", "если", "тогда и только тогда", соответственно. Связки можно применить для образования логических формул, объединяя предикаты и другие формулы. Необходимо отметить, что логические связки:, &, , ¬, <- , <-> могут быть выражены друг через друга с помощью следующих соотношений, называемых формулами сокращения:


( A  B ) означает ¬ ( A <- B ),

( A \/ B ) означает ( ¬ A) <- B,

( A <-> B ) означает ( A <- B )( B <- A ),


где А и В - суть формулы. Наряду со связками существуют кванторы общности () и существования (). Кванторы определяют пределы изменения переменных. Формула, стоящая после квантора называется областью действия этого квантора. Для кванторов тоже существуют формулы сокращения:


x А означает (¬(x (¬А))).


Примерами формул служат выражения:


мама(x, y)мама(y, z);

F1F2F3¬F4, если F1,F2,F3,F4 - формулы.

Q(F1,F2), если F1 и F2 - формулы, а Q - квантор существования () или общности (  ).

Таким образом, понятие формулы можно сформулировать таким образом:

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

С помощью этого понятия можно сформулировать понятие предложение:

Предложение - это формула, в которой каждая переменная находится в области действия квантора общности.

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

В качестве примера предложения можно привести выражение:


бабушка(x, y)<-мама(x, z)мама(z, y).


Содержательно это предложение означает, что бабушка это мама мамы. Перед этим предложением стоят знаки кванторов общности по переменным x, y, z. Их присутствие означает, что формула выполнена для всех x, y, z.

Предложения, построенные в соответствии с введенными выше правилами образуют, язык логики первого порядка. В этом языке термы представляют собой объекты, а предикаты отношения между объектами. С помощью этого языка можно описать все задачи, решаемые на ЭВМ. На основе языка логики первого порядка можно построить различные языки логического программирования, различающиеся по правилам формирования предложения. Среди множества всевозможных предложений особое значение имеют предложения, содержащие связки "и" (  ) и одну связку "если" ( <- ). Такие предложения называются дизъюнктами. Более точное определение. Дизъюнкт - это предложение вида:


A1A2...Ak<-B1B2...Bn, (2.1)


где A1,A2,...,Ak,B1,B2,...,Bn - предикаты или литеры.

Особое значение для Пролога-Д имеет понятие дизъюнкта Хорна.

^ Дизъюнктом Хорна называется такой дизъюнкт, у которого k = 0 или k = 1. При k = n = 0 получается пустой дизъюнкт, обозначаемый символом Л.

Если k = 0, то из формулы (1) получается дизъюнкт вида:


B1B2...Bn,


Этот дизъюнкт называется вопросом.

Среди множества всех дизъюнктов особую роль играют те, для которых k=1. Если при этом еще и n=0, то такой дизъюнкт называется фактом:

A1.


Если же n>0, дизъюнкт называется правилом:


A1<- B1B2...Bn,


где A - голова, а B1B2...Bn, - цели, образующие тело правила.

Необходимо отметить свойство формул (2.1). Если воспользоваться, приведенными выше формулами сокращения, связывающими логические связки, то оказывается, что любой дизъюнкт можно преобразовать к такой формуле, что в записи ее будут использованы только связки  (или), ¬ (не).

Введенные определения позволяют установить следующую иерархию:

формула



предложение



дизъюнкт



дизъюнкт Хорна


/   \


факт правило вопрос пустой

дизъюнкт


Рисунок 2.1.1. Иерархия определений.


Базой знаний будет называться всякое (непустое) множество фактов и правил.

Записанная в базе знаний информация представлена в некоторой формально - логической системе и предназначена для изучения информации посредством применения определенного процесса рассуждений, базирующегося на логическом выводе. Эти рассуждения основаны на понятии логического следствия. Известно, что логическое следствие из заданной совокупности допущений или предположений истинно, если истинны эти предположения. Однако одна и та же формула может быть истинной или ложной в зависимости от ее содержательного значения. Например, логическая формула:


(x>y)<-(|x|>|y|),


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

Для интерпретации множества предложений S выбирается множество объектов D, называемое областью интерпретации.

Интерпретация множества предложений S над D состоит из следующих трех соответствий:

1. Каждой константе (числовой или литеральной) ставится в соответствие некоторый элемент из D.

2. Каждому n-арному функтору из S сопоставляется отображение n-ки из Dn в D.

3. Каждому n-арному предикатному символу из S сопоставляется отображение n-ки из Dn в множество {ИСТИНА, ЛОЖЬ}.

Примером интерпретации для множества предложений, описывающих родственные отношения:


{мама(Саша, Оля), мама(Петя, Маша), сын(x, y)<-мама(y, x)}

являются следующие правила.


1. Область интерпретации D={Саша, Оля, Петя, Маша};

2. Функторы отсутствуют.

3. Отображение а). мама(x, y)->^ {ИСТИНА, ЛОЖЬ},

б). сын(x, y)->{ИСТИНА, ЛОЖЬ}.


Точное определение логического следствия, основано на понятии выполнимости формулы (предложения). Формула (предложение) выполняется в интерпретации над множеством D тогда и только тогда, когда это предложение в данной интерпретации принимает значение ИСТИНА. Соответственно множество предложений S выполняется в данной интерпретации тогда и только тогда, когда выполняется любое предложение из S. S логически влечет некоторое предложение s, тогда и только тогда, когда для любой интерпретации над любой областью D из выполнимости множества S следует выполнимость в ней s. Если вернуться к последнему примеру, то множество предложений:


S={мама(Саша, Оля), мама(Петя, Маша), сын(x, y)<-мама(y, x)}
логически влечет s =сын(Маша, Петя). Это обозначается S = s. 30


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

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

Пусть S - некоторое множество дизъюнктов и U - дизъюнкт. Необходимо определить является ли U логическим следствием из S. Для этого множество S дополняется отрицанием ¬U. Если окажется, что объединение множеств S и {¬U} противоречиво, то U логически следует из S.

Предположим, что даны два дизъюнкта C1 и C2 из S, а L1 и L2 - комплементарные литеры из C1 и C2 соответственно (литеры U и ¬U называются комплементарными). Дизъюнкция C1 и C2 (C1C2), в которой предварительно вычеркнуты литеры L1 и L2, называется резольвентой.

^ Принцип резолюции основан на том, что резольвента дизъюнктов C1 и C2 является логическим следствием C1 и C2. Если в результате многократного применения процесса построения резольвент получается пустой дизъюнкт, то множество дизъюнктов S противоречиво. Более того, для противоречивого множества дизъюнктов применениями процесса построения резольвент всегда можно получить пустой дизъюнкт (Л).

Иллюстрацией этого процесса может быть следующий пример.

Множество дизъюнктов S задано следующим образом:


P¬Q1¬Q2 (2.2)

P¬Q3 (2.3)

U¬Q3 (2.4)

U¬P¬R (2.5)

R (2.6)

Q1 (2.7)

Q3 (2.8)


Для доказательства того, что U является логическим следствием из S, к множеству S добавляется дизъюнкт


¬U. (2.9)


Тогда получаются резольвенты:


¬Q3 (2.10)


из (2.9) и (2.4), а:


Л - пустой дизъюнкт (2.11)


из (2.10) и (2.8.).

Следует отметить, что возможен и другой логический вывод.

В данном примере U логически следует из S.

Предположим, что в рассматриваемом примере дизъюнкт (2.9) и предложение (2.4) имеют вид:


¬U(F(a)) (2.9')

U(x)\/¬Q3(x) (2.4')


Не существует какой-либо литеры в (2.9'), комплементарной какой-либо литере в (2.4'). Однако, после подстановки в (4') вместо x - F(a), получается:


U(F(a))¬Q3(F(a)) (2.4'')


Теперь U(F(a)) и ¬U(F(a)) комплементарны друг другу. Следовательно, получается резольвента ¬Q3(F(a)). Следующее определение вводит понятие подстановки.

Подстановка - это конечное множество вида:


(t1/v1,...,tn/vn),


где vi - переменные, а ti - термы.

В приведенном примере (2.9'), (2.4') использована подстановка (F(a)/x).

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

Унификацией двух выражений Е1 и Е2 с переменными v1,...,vn (или без них) называется нахождение такой подстановки (может быть и пустой), что выражения Е1 и Е2 совпадут. Такая подстановка называется унификатором. Если оказалось, что для данных термов не существует унификатора, то термы не унифицируемы.

^

2. Процедурная семантика Пролога-Д или исполнение программы.


База знаний и следующий за ней вопрос представляют собой программу на Прологе-Д.

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

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

Если предложение - правило, то это имя должно быть именем головы, или если это предложение факт, имя факта. Проверяется существование подстановки унифицирующей цель вопроса и это предложение. Если такая подстановка не существует, то делается попытка найти следующее по порядку предложение с таким же именем. Если такая подстановка найдена, то резольвентой оказывается тело правила, если предложение - правило или пустой дизъюнкт, если предложение факт. Далее просматриваются цели в теле правила, так как если бы это были цели в вопросе. Просмотр целей осуществляется слева направо.

Сущность метода резолюций можно проиллюстрировать на примере


P<-Q1,Q2; (3.1.)

P<-Q3; (3.2.)

U<-Q3; (3.3.)

U<-P,R; (3.4.)

R; (3.5.)

Q1; (3.6.)

Q3; (3.7.)

?U; (3.8.),


где выражения (3.1.)-(3.4.)-представляют собой запись правил, а (3.5.) - (3.8.) - запись фактов. Все вместе это предложения базы знаний. Обратите внимание, что предложения (3.1.)-(3.8.) записаны в иной форме, чем предложения (2.2.)-(2.9.). Обе эти записи эквивалентны. Система Пролог-Д среди предложений(3.1.) - (3.8.) отыскивает первое по порядку вхождение U. В данной программе таковым оказывается предложение (3.3.). Далее делается попытка удовлетворить условия правила (3.3.). Для этого вновь просматриваются предложения базы знаний с целью поиска первого предложения, определяющего Q3. Таковым предложением оказывается формула (3.7.).

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

3. Факты и правила.



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

Иными словами, создание информационно-логической модели описываемого на языке Пролог-Д этого явления или процесса. Основное назначение данного раздела состоит в описании методики разработки баз знаний, на примерах достаточно простых, заимствованных из традиционной практики. Первый шаг в направлении построения базы знаний состоит в выявлении объектов и соотношений между ними, отвечающих на вопрос: "Что дано?". Такую информацию целесообразно представлять в виде совокупности фактов. Классическим примером фактографии служит англо-русский словарь. Записанный средствами Пролога-Д он выглядит так:


русангл(мама, mammy);

русангл(небо, sky);

русангл(солнце, sun);

русангл(мальчик, boy);

русангл(круг, ring);

русангл(вокруг, arоund);,


и так далее. Последовательность фактов можно и продолжить, но уже сейчас достаточно слов, чтобы перевести на английский известную детскую песню. Подобные отношения представляют собой грамматическую конструкцию Пролога-Д, называемую фактом. Факт задается в виде функционалa: имя, и совокупность аргументов. В данном примере "русангл" - это имя факта оно определяет информацию, записываемую в нем. Русские и английские слова: мама, mammy, небо, sky, солнце, sky, мальчик, boy представляют собой аргументы факта, определяющего взаимно однозначное соответствие между русскими и английскими словами. Необязательно, чтобы факт имел два аргумента. Например, факт: мужчина(Николай); имеет один аргумент - Николай и имя - мужчина, а факт родился(Петров,Иван,10,сентябрь,1979); имеет пять аргументов - Петров, Иван, 10, сентябрь, 1979 и имя родился. Однако, с точки зрения синтаксиса языка Пролог-Д, необходим хотя бы один аргумент. Если факт в базе знаний имеет имя и не имеет аргументов, то система выдаст сообщение о синтаксической ошибке. Приведенный пример, по сути дела, уже является базой знаний на языке Пролог-Д. К этой базе знаний можно задавать различные вопросы:


?русангл(y,x); - если необходимо узнать, все слова, хранящиеся в базе знаний,


?русангл(мама, x); - если необходимо узнать как по английски мама?


?русангл(x, sky); - если необходимо узнать, что означает слово sky?


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

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

Например, в задаче о построении родственных отношений можно определить следующие правила:


бабушка(x,y)<-мама(x,z),мама(z,y);
бабушка(x,y)<-мама(x,z),папа(z,y);
дедушка(x,y)<-папа(x,z),папа(z,y);
дедушка(x,y)<-папа(x,z),мама(z,y);


Глубина процесса декомпозиции в данном случае автоматически устанавливается. Она определена понятиями "мама", "папа".

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


родитель(x,y)<-мама(x,y);

родитель(x,y)<-папа(x,y);,


то бабушку и дедушку можно определить проще:


бабушка(x,y)<-мама(x,z),родитель(z,y);

дедушка(x,y)<-папа(x,z),родитель(z,y);.


Если, к только, что записанным правилам добавить несколько фактов, определяющих мам и пап, то получается база знаний, которая называется "семья":


мама(Саша,Петя);

папа(Сережа,Петя);

мама(Оля,Саша);

папа(Коля,Саша);

мама(Люда,Сережа);

папа(Петя,Сережа);

родитель(x,y)<-мама(x,y);

родитель(x,y)<-папа(x,y);

бабушка(x,y)<-мама(x,z),родитель(z,y);

дедушка(x,y)<-папа(x,z),родитель(z,y);.


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

^

4.Арифметика и другие встроенные предикаты в Прологе-Д.



Системы логического программирования, к числу которых относится и Пролог-Д, не предназначены для вычислений. Традиционный для Пролога-Д подход при выполнении арифметических действий описан в упражнении 5 из предыдущего раздела. Однако для определения таким образом всех математических действий памяти компьютера будет недостаточно. Поэтому традиционные действия, связанные с выполнением арифметических операций осуществляются посредством специальных встроенных предикатов. В системе Пролог-Д для выполнения арифметических действий предусмотрен один встроенный арифметический предикат: УМНОЖЕНИЕ(Арг1,Арг2,Арг3,Арг4) Встроенный предикат УМНОЖЕНИЕ имеет четыре аргумента: целых, переменных, конкретизированных целыми, не конкретизированных переменных, допускает обратимость всех аргументов, однако, он может быть использован только в качестве цели в предложении. Предикат УМНОЖЕНИЕ предусматривает реализацию формулы: Арг1*Арг2+Арг3=Арг4.

Предикат предусматривает обратимость аргументов и полностью покрывает арифметические операции в области целых чисел, предусмотренных синтаксисом входного языка ( -32767 <число> 32767). Следующая база знаний на языке Пролог-Д показывает, что с помощью данного предиката можно описать любые арифметические операции:


СЛОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(1,X,Y,Z);

ВЫЧИТАНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(1,X,Z,Y);

УМНОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(X,Y,0,Z);

ДЕЛЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(Y,Z,0,X);


Во всех четырех случаях X,Y - суть операнды операций, а Z - результат. Например, СЛОЖЕНИЕ(X,Y,Z) реализует арифметическую операцию сложение: Z=X+Y. Более подробное описание синтаксиса встроенного предиката УМНОЖЕНИЕ приведено в описании синтаксиса. Предикат УМНОЖЕНИЕ позволяет описывать вычислительные задачи.

Пример 1. На Прологе-Д необходимо описать вычисление площади прямоугольника, имеющего стороны длиной a и b. Известна формула определяющая площадь прямоугольника Sпр. Sпр=a*b.

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


УМНОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(X,Y,0,Z);

площадь(a,b,S)<-УМНОЖЕНИЕ(a,b,S);.


Первый предикат УМНОЖЕНИЕ потребовалось определить для наглядности записи. Необходимо отметить, что предикат площадь обратим, это означает, что, пользуясь этим описанием можно вычислить не только площадь по заданным сторонам, но и любую (одну) сторону по другой стороне и площади. К базе знаний можно задать вопросы:


?площадь(10,20,S);


ответ системы Пролог-Д: S=200,


?площадь(a,20,100);


ответ системы Пролог-Д: a = 5. Более сложная задача представлена в нижеследующем примере.

Пример 2. На Прологе-Д необходимо описать вычисление объема параллелепипеда высотой h, в основании которого прямоугольник, имеющий стороны длиной a и b. Известна формула определяющая объема параллелепипеда Vпар. Vпар=a*b*h. Предикат, который будет выполнен, если будет вычислен объем параллелепипеда должен иметь четыре аргумента - длины сторон a, b, высоту h и величину объема. Имя предиката должно отражать его назначение, вероятно, этому критерию удовлетворит имя объем:


УМНОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(X,Y,0,Z);

объем(a,b,h,V)<-УМНОЖЕНИЕ(a,b,S), УМНОЖЕНИЕ (S, h, V);


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


Vпар=Sосн*h.


Эту базу знаний предлагается написать самостоятельно.

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


?объем(10,20,5,V);


ответ системы Пролог-Д: V=200. Наряду с арифметическим предикатом существуют два предиката БОЛЬШЕ и НЕ. Встроенный предикат БОЛЬШЕ(Арг1,Арг2) предназначен для сравнения двух целых или переменных. Он имеет два аргумента: целых или переменных, конкретизированных целыми. Оба аргумента к моменту выполнения должны быть определены. Если эти требования не выполнены, то появится сообщение об ошибке: "Функция не может быть выполнена.". Предикат выполнен, если Арг1 > Арг2, иначе - не выполнен. Несмотря на то, что предикат БОЛЬШЕ один, его достаточно для описания всех возможных предикатов для сравнения числовой информации: равенство - РАВНО; меньше - МЕНЬШЕ; меньше и равно - МИР и так далее. Это показывает база знаний, приведенная ниже:


РАВНО(X,X);

МЕНЬШЕ(X,Y)<-БОЛЬШЕ(Y,X);

МИР(X,Y)<-НЕ(БОЛЬШЕ(X,Y);


В последнем предложении использован встроенный предикат НЕ, его синтаксис: НЕ(Арг1); Этот встроенный предикат имеет один аргумент, он обязательно должен быть предикатом. Предикат НЕ выполнен тогда и только тогда, когда предикат - аргумент не выполнен. А теперь несложный пример, иллюстрирующий применение БОЛЬШЕ и НЕ.

Пример 3. Опишите на языке Пролог-Д вычисление функции Хевисайда, определяемую формулой:


0, если x<0;

h(x) =  0, если x=0;

 1, если x>0.


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


МИР(X,Y)<-НЕ(БОЛЬШЕ(X,Y);

ХЕВИСАЙД(X,0)<-МИР(X,0);

ХЕВИСАЙД(X,1)<-БОЛЬШЕ(X,0);


К этой базе знаний можно задать различные вопросы.


?ХЕВИСАЙД(20,X);


ответ системы Пролог-Д: X=1. И, наконец, последний встроенный предикат - это предикат - "отсечение", предназначенный для управления логическим выводом. Этот предикат потребуется для решения следующих проблем:

1. Ограничение количества найденных решений.

2. Нахождение некоторого особенного решения задачи.

3. Ограничение объема поиска, с целью повышения эффективности работы компьютера. Предикат "отсечение" обозначается знаком восклицания - (!).

Необходимо отметить, что это традиционное обозначение отсечения в системах логического программирования. Если данный предикат использовать в качестве цели в предложении, то полученный при этом эффект можно проиллюстрировать дверью, через которую можно пройти только слева направо, но нельзя вернуться назад через эту дверь. Роль двери выполняет символ !. Как известно система Пролог-Д будет пытаться выполнять цели в предложении порядке просмотра слева направо, начиная от символа <- от первой до последней цели. Если какая-либо цель оказывается не выполненной, то осуществляется возврат и делается попытка найти альтернативные решения. Отсечение ограничивает возможность поиска альтернатив с того момента, как была просмотрена цель, обозначенная символом !. По этой причине, если не выполнены цели А,Б,В, возврат для нахождения альтернативных решений в предложении пример<-А,Б,В,!,Г,Д,Е; возможен, а, если не выполнены цели Г,Д или Е, то уже нет. Рубикон при движении слева направо перейден. Необходимо отметить важность этого предиката особенно при описании задач, допускающих множественные решения. Иллюстрация предиката отсечение на примере базы знаний мама. Действительно, у каждого человека не может быть две матери, поэтому, определив для данного человека имя матери, необходимо прекратить дальнейшие поиски.


мама(Саша,Петя)<-!;

мама(Наташа,Ваня)<-!;

мама(Оля,Петя)<-!;

мама(Катя,Даша)<-!;

мама(Люда,Сережа)<-!;

мама(Петя,Костя)<-!;


к базе знаний может быть задан вопрос


?мама(x,Даша); ответ системы Пролог-Д:


x=Kатя ДРУГИХ РЕШЕНИЙ НЕТ.


После нахождения первого решения поиск альтернатив не производится.

5. Рекурсия.



Существует огромное количество задач, в которых отношения между объектами можно определить, только используя сами определяемые соотношения. При этом получаются правила, называемые рекурсивными. Применение рекурсии для описания задач при работе с системами логического программирования широко распространенный прием. Рекурсия будет проиллюстрирована несколькими примерами построения программ, как вычислительных, так и логических. Первым примером будет пример вычисления наибольшего общего делителя (НОД) двух чисел. Предикат, который выполняется, если найден НОД двух данных чисел будет иметь имя нод и три аргумента: числа a,b и значение НОД - c. Для описания вычисления НОД используются следующие соображения. Во-первых, если, а=b, то c=a=b; Во-вторых, если, а>b, то необходимо вычислить НОД для чисел b и a-b; В-третьих, если b>a, то необходимо вычислить НОД для чисел a и b-a. Эти три утверждения естественным образом могут быть записаны на Прологе-Д.:

нод(а,а,а);


нод(а,b,c)<-БОЛЬШЕ(а,b),ВЫЧИТАНИЕ(a,b,d),нод(b,d,c);


нод(а,b,c)<-БОЛЬШЕ(b,а),ВЫЧИТАНИЕ(b,a,d),нод(a,d,c);

ВЫЧИТАНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(1,X,Z,Y);


Если к этой базе знаний задать вопрос:


?нод(10,15,x);


ответ системы Пролог-Д:


x=5 ДРУГИХ РЕШЕНИЙ НЕТ


Предикат нод, определенный выше оказывается обратимым. В качестве второго примера рассматривается задача о вычислении элементов последовательности: 0, 1, 1, 2, 3, 5, 8, 13, 21 ,34, 55, 89, 144,... , известной как последовательность Фибоначчи. Каждый элемент ее определяется следующими правилами:


f0 =0,

f1 =1,

fn =fn-1+fn-2, при n>1


Первая формула соответствует утверждению о том, что значение нулевого элемента последовательности равно нулю. Это можно записать в виде факта: Фиб(0,0);. Вторая строка соответствует утверждению: первый элемент равен 1. На Прологе-Д это можно записать так: Фиб(1,1);. Третья строка представляет собой запись рекурсивного соотношения:


Фиб(N,X)<-БОЛЬШЕ(N,1),ВЫЧИТАНИЕ(N,1,М),

ВЫЧИТАНИЕ(N,2,К), Фиб(М,Y), Фиб(K,Z),

СЛОЖЕНИЕ(Y,Z,X);


ВЫЧИТАНИЕ и СЛОЖЕНИЕ - имена предикатов вычитание и сложение, определяемых с помощью правил:


СЛОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(1,X,Y,Z);

ВЫЧИТАНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(1,X,Z,Y);.


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


?Фиб(10,X);


ответ системы Пролог-Д:


x=55 ДРУГИХ РЕШЕНИЙ НЕТ


Необходимо сказать, что такой путь решения данной задачи не самый лучший. Для нахождения N+1 числа Фибоначчи требуется 2* (N+1)-1 рекурсивное обращение. Однако этого можно избежать, если перейти к другой базе знаний, в которой предикат с именем "Фиб" определен как трехарный, то есть имеющий три аргумента, включающий в себя в качестве аргумента значения N-ого и N-1- ого элементов последовательности. Такая база знаний получается в результате перевода на язык Пролог-Д утверждений.

1. 0-ой элемент последовательности есть 0, а (-1) -ый элемент не определен. Фиб(0,x,0);.

Второй аргумент обозначен x. В данном случае значение x может быть любым.

2. 1-й элемент последовательности есть 1, а нулевой-0. Фиб(1,0,1);. 3. N -й член последовательности Фибоначчи определяется через (N-1) -Й член последовательности.


Фиб(N,F,f)<-БОЛЬШЕ(N,1),ВЫЧИТАНИЕ(N,1,M),Фиб (M,Ф,F), СЛОЖЕНИЕ (Ф, F, f);.


Обращение к этой базе знаний будет иметь вид:


?Фиб(10,F,f);.


ответ системы Пролог-Д:


F=55, f=34 ДРУГИХ РЕШЕНИЙ НЕТ


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


родитель(X)<- родитель(Y),отец(Y,Z);

родитель(Коля);

отец(Коля, Петя);

родитель(Петя);


В первом предложении голова имеет то же имя, что и одна из целей - "родитель". В процессе поиска ответа в этой базе знаний будет применено правило: предложение, стоящее первым, будет и применено первым - известное как принцип поиска в глубину. Это приведет к тому, что система будет обращаться только к первому предложению базы знаний и ответ на вопрос ?родитель(Петя); не будет найден никогда. Вместе с тем, небольшое изменение базы знаний, перестановка двух предложений местами, приводит к удачному поиску решения:


родитель(Коля);

родитель(X)<-родитель(Y), отец(Y,X);

отец(Коля, Петя);

?родитель(Петя);.

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


ВЫШЕ(А,В)<-НИЖЕ(В,А);

НИЖЕ(В,А)<-ВЫШЕ(А,В);

ВЫШЕ(Коля, Петя);

?НИЖЕ(Петя, Коля);.


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


?Фиб(0,x,y);,


то первый возможный результат x =_0, y =1. Далее в попытке отыскать следующее решение возникает бесконечная петля, так как будет отыскиваться Фиб(-1,x,y), Фиб(-2,...),... . Для контроля за подобной ситуацией необходима модификация базы знаний. Первые два предложения должны быть записаны в виде:


Фиб(0,x,1)<-!;

Фиб(1,1,1)<-!;,


тогда при поиске альтернативного решения после получения ответа на вопрос:


?Фиб(0,x,y); x=_0, y =1


будет получен результат:


^ ДРУГИХ РЕШЕНИЙ НЕТ.


Данный пример иллюстрирует первое возможное использование предиката "отсечение". И еще одно чисто эстетическое предложение. База знаний на Прологе-Д будет выглядеть лучше, если предложения с одинаковыми именами расположены в одном месте. Для сравнения приводится две базы знаний:


1. 2.

мама(Таня, Надя); мама(Таня, Надя);

бабушка(X,Y)<-мама(X,Z), мама(Надя, Катя);

мама(Z,Y), бабушка(X,Y)<-мама(X,Z),

мама(Надя, Катя); мама(Z,Y);.

^

6.Графические возможности системы Пролог-Д



Когда речь идет о компьютерной графике, построение изображения на экране интерпретируется серией команд. Таким образом, всякое изображение ассоциируется с алгоритмом его построения. Однако, эта концепция не укладывается в принципы декларативного программирования, принятые в системе Пролог-Д. Если последовать этой концепции то необходимым становится описание элементов рисунка в виде совокупности графических объектов, соотношений и связей между ними. В этом случае описание последовательности действий художника - исполнителя становится излишним. В системе Пролог-Д определен набор графических примитивов, отображающих графические объекты и построенных таким образом, что с точки зрения синтаксиса каждый из них может быть только целью, и принимает значение "истина" (выполняется), если на экране появляется графическое изображение объекта. При записи в правиле нескольких графических примитивов и выполнении данного правила на экране появляется объединение графических образов в той последовательности, как они описаны в правиле. Во всех графических встроенных предикатах аргументами должны быть целыми или переменными, конкретизированными целыми, или не конкретизированными переменными. Если это требование не выполнено, то появится сообщение об ошибке. Параметр v - вертикальный размер, а h - горизонтальный размер экрана. Для стандартной платы видеоадаптера VGA v=349, h=639. В предикатах ТОЧКА, ЛИНИЯ, ОКРУЖНОСТЬ, ЗАКРАСКА последний параметр задает цвет. Как правило, если на этом месте стоит не конкретизированная переменная, то также выводится сообщение об ошибке. Для обозначения цвета при использовании видеоадаптера VGA принята кодировка цветов, изображенная в таблице 3.4.1. В системе Пролог-Д имеет место особенность использования встроенных предикатов, обусловленная спецификой графических средств системы IBM-PC. Для использования графики необходимо открыть графический файл с помощью предиката ЗАПИСЬ_В(“grp:”). После завершения работы необходимо открыть файл для вывода текста ЗАПИСЬ_В(“con:”).


0

черный

8

темно серый

1

синий

9

светло синий

2

зеленый

10

светло зеленый

3

голубой

11

светло голубой

4

коричневый

12

красный

5

фиолетовый

13

сиреневый

6

темно желтый

14

желтый

7

серый

15

белый


Таблица 3.4.1. Таблица кодирования цвета в системе Пролог-Д.


В системе Пролог-Д предусмотрены следующие встроенные графические предикаты:

1. ТОЧКА.

Синтаксис: ТОЧКА(Арг1,Арг2,Арг3)

Встроенный предикат ТОЧКА имеет три аргумента. Ниже приведены результаты выполнения в зависимости от типа аргумента.

ТОЧКА(ц1,ц2,ц3) Установить точку с координатами (ц1,ц2) и цветом ц3;

ТОЧКА(ц1,ц2,П3) П3 := цвет_точки(ц1,ц2);

ТОЧКА(ц1,П2,ц3) Рисовать линию с начальной точкой (ц1,0), конечной - (ц1,211) цветом ц3;

ТОЧКА(П1,ц2,ц3) Рисовать линию с начальной точкой (0,ц2), конечной - (255,ц2) цветом ц3;

ТОЧКА(П1,П2,ц3) Заполнить экран цветом ц3. В этих пяти случаях предикат истинен, иначе - выполнение программы прекращается и выводится сообщение об ошибке: "Невыполнимый предикат ТОЧКА".


2. ЛИНИЯ.

Синтаксис: ЛИНИЯ(Арг1,Арг2,Арг3,Арг4,Арг5).

Этот встроенный предикат имеет пять аргументов. Пятый аргумент всегда должен быть целым, арифметическим выражением или переменной, конкретизированной целым. Результаты выполнения приведены ниже:

ЛИНИЯ(ц1,ц2,ц3,ц4,ц) Рисовать линию с начальной точкой (ц1,ц2), конечной - (ц3,ц4), цветом ц

ЛИНИЯ(ц1,ц2,ц3,П4,ц) Рисовать закрашенный треугольник с вершинами (ц1,ц2), (ц3,0), (ц3,211) и цветом ц;

ЛИНИЯ(ц1,ц2,П3,ц4,ц) Рисовать закрашенный треугольник с вершинами (ц1,ц2), (0,ц4), (255,ц4) и цветом ц;

ЛИНИЯ(ц1,П2,ц3,ц4,ц) Рисовать закрашенный треугольник с вершинами (ц1,0), (ц1,211), (ц3,ц4) и цветом ц;

ЛИНИЯ(П1,ц2,ц3,ц4,ц) Рисовать закрашенный треугольник с вершинами (0,ц2), (255,ц3), (ц3,ц4) и цветом ц;

ЛИНИЯ(П1,П2,ц3,ц4,ц) | ЛИНИЯ(ц1,ц2,П3,П4,ц) |

ЛИНИЯ(ц1,П2,П3,П4,ц) | ЛИНИЯ(П1,ц2,П3,П4,ц) - Заполнение экрана цветом ц

ЛИНИЯ(П1,П2,ц3,П4,ц) | ЛИНИЯ(П1,П2,П3,ц4,ц) |

ЛИНИЯ(П1,П2,П3,П4,ц) | ЛИНИЯ(ц1,П2,ц3,П4,ц) - Вертикальный, закрашенный цветом ц прямоугольник, с вершинами (ц1,0), (ц1,211), (ц2,0), (ц2,211);

ЛИНИЯ(П1,ц2,П3,ц4,ц) Горизонтальный закрашенный цветом ц прямоугольник с вершинами (0,ц2), (255,ц2), (0,ц4), (255,ц4);

ЛИНИЯ(ц1,П2,П3,ц4,ц) Четырехугольник цветом ц с вершинами (ц1,0), (ц1,211), (0,ц4), (255,ц4);

ЛИНИЯ(П1,ц2,ц3,П4,ц) Четырехугольник цветом ц с вершинами (0,ц2), (255,ц2), (ц3,0), (ц3,211).

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


3. ОКРУЖНОСТЬ.

Синтаксис: ОКРУЖНОСТЬ(Арг1,Арг2,Арг3,Арг4).

Встроенный предикат ОКРУЖНОСТЬ имеет четыре аргумента. Четвертым аргументом всегда должно быть целое, арифметическое выражение или переменная, конкретизированная целым. Ниже приведены результаты выполнения в зависимости от типов аргументов.

ОКРУЖНОСТЬ(ц1,ц2,ц3,ц) Окружность с центром (ц1,ц2), радиусом ц3, цветом ц;

ОКРУЖНОСТЬ(ц1,ц2,П3,ц) | ОКРУЖНОСТЬ(ц1,П2,П3,ц) |

ОКРУЖНОСТЬ(П1,ц2,П3,ц) Заполнение экрана цветом ц

ОКРУЖНОСТЬ(П1,П2,П3,ц) | ОКРУЖНОСТЬ(П1,П2,ц3,ц) |

ОКРУЖНОСТЬ(ц1,П2,ц3,ц) Вертикальный закрашенный цветом ц прямоугольник с вершинами: (ц1-ц3,0), (ц1-ц3,211), (ц1+ц3,0), (ц1+ц3,211);

ОКРУЖНОСТЬ(П1,ц2,ц3,ц) Горизонтальный закрашенный цветом ц прямоугольник с вершинами: (0,ц2-ц3), (255,ц2-ц3), (0,ц2+ц3), (255,ц2+ц3); В этих восьми случаях предикат истинен, иначе выполнение программы прекращается и выводится сообщение об ошибке: "Невыполнимый предикат ОКРУЖНОСТЬ"


7. ЗАКРАСКА.

Синтаксис: ЗАКРАСКА(Арг1,Арг2,Арг3,Арг4).

Встроенный предикат ЗАКРАСКА имеет четыре аргумента. Процедурно этот предикат означает закрасить цветом Арг3 внутри контура с граничным цветом Арг4 начиная с точки (Арг1,Арг2). Предикат всегда истинен. Все аргументы должны быть целыми, арифметическими выражениями или переменными, конкретизированными целыми. Если это условие не выполняется, то выполнение программы прекращается и выводится сообщение об ошибке: "Невыполнимый предикат ЗАКРАСКА".

Пример: закрашенный квадрат


рамка(x1',y1',x2',y2',цвет')<-ЛИНИЯ(x1',y1',x1',y2',цвет');

ЛИНИЯ(x1',y1',x2',y1',цвет');ЛИНИЯ(x1',y2',x2',y2',цвет');

ЛИНИЯ(x2',y1',x2',y2',цвет');

пример <- рамка(50,50,150,150,8),ЗАКРАСКА(100,100,15,8);

?пример;.


В качестве примера приводится описание угла, вершина которого находится в точке (x,y):


угол(x,y)<-ЛИНИЯ(x,y,10,10,1),ЛИНИЯ(x,y,150,50,1);

?угол(100,100);.


Сначала будет нарисован отрезок, соединяющий точки (100,100) и (10,10), а затем отрезок, соединяющий точки (100,100) и (50,50). Если бы пятым аргументом предикатов ЛИНИЯ было бы число равное нулю, то точки отрезков были бы не видимы. Не обязательно, чтобы описание всей картинки было записано в одном предложении. Часть описания может быть выделена в виде отдельного предложения. Программу предыдущего примера можно модифицировать:


угол(x,y)<-ЛИНИЯ(x,y,10,10,1),продолжение(x,y);

продолжение(x,y)<-ЛИНИЯ(x,y,50,50,1); ?угол(100,100);.


Новая программа будет выполнять те же самые функции, хотя и записывается в два предложения. Система Пролог -Д допускает возможность использования переменных в графических примитивах. В качестве примера приводится описание вектора, выходящего из точки A с кoординатами (x, y) в точку B координатами (s,t):


вектор(A(x,y),B(s,t))<-ЛИНИЯ(x,y,s,t,1);


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

В качестве примера приводится вопрос:


?ЛИНИЯ(0,0,x,0,1);.


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


квадр(x,y,z,t)<-ЛИНИЯ(x,y,x,t,1),ЛИНИЯ(x,y,z,y,1),

ЛИНИЯ(x,t,z,t,1), ЛИНИЯ(z,y,z,t,1);.


Аналогично определяется треугольник:


треуг(x,y,z,t)<-ЛИНИЯ(x,y,t,y,1),СЛОЖЕНИЕ(x,t,r),

ДЕЛЕНИЕ(r,2,f), ЛИНИЯ(x,y,f,z,1), ЛИНИЯ(f,z,t,y,1);


(Предикат с именем ДЕЛЕНИЕ - предикат деления первого аргумента на второй, частное в третьем, а предикат с именем СЛОЖЕНИЕ есть сложение первого аргумента со вторым, результат в третьем аргументе.) Oпределение дома длиной 20 единиц, высотой этажа 10 единиц и высотой крыши 20 единиц имеет вид:


дом(x,y)<-крыша(x,y,r,f),этаж(x,y,f);

этаж(x,y,f)<-СЛОЖЕНИЕ(y,20,z),квадр(x,y,f,z);

крыша(x,y,r,f)<-СЛОЖЕНИЕ(r,10,y),СЛОЖЕНИЕ(x,20,f),

треуг(x,y,r,f);


Вновь необходимо разделить это описание на две части: в одной части определяется крыша, а в другой, следующей, этаж. (Это, именно тот случай, когда дом начинают строить с крыши.) Использование рекурсивных определений дает возможность записать базу знаний более лаконично. Рекурсия может быть использована и для создания динамически изменяющегося графического объекта. Для этого на одном и том же месте последовательно фиксируется образ объекта, так, что его цвет попеременно меняется от цвета фона до цвета, определяемого в базе знаний. Например, описание летящей птицы, машущей крыльями. В предикате взмах описан взмах вниз и, затем, взмах вверх. Первому положению соответствует горизонтальное положение отрезка белого цвета, затем этот отрезок гасится, становится цветом фона. Положению вверх соответствует угол, состоящий из двух отрезков белого цвета, которые затем гасятся. Каждое из понятий вверх и вниз описывается отдельно, при этом производятся арифметические операции, необходимые для вычисления координат начала и конца отрезков. Периодическое повторение взмаха вверх и вниз осуществляется с помощью рекурсивного обращения к одному и тому же предикату птица. (Внимание! В некоторых вариантах транслятора может быть не предусмотрена обработка возникающей в данном примере эффекта концевой рекурсии, типа петли. Следствием этого может быть аварийный останов после нескольких десятков взмахов. Полное описание птицы, машущей крыльями, приведено ниже:


птица(x,y)<-взмах(x,y),птица(x,y);

взмах(x,y)<-вниз(x,y,1),вниз(x,y,0), вверх(x,y,1), вверх(x,y,0);

вниз(x,y,c)<-сдв(x,y,z,t,u,v), ЛИНИЯ(z,y,u,y,1);

вверх(x,y)<-сдв(x,y,z,t,u,v),ЛИНИЯ(x,y,z,t,1), ЛИНИЯ(x,y,u,v,1);

сдв(x,y,z,t,u,v)<-сдп(x,y,z,t),сдл(x,y,u,v);

сдп(x,y,z,t)<-СЛОЖЕНИЕ(x,5,z),СЛОЖЕНИЕ(t,5,y);

сдл(x,y,z,t)<-СЛОЖЕНИЕ(z,5,x),СЛОЖЕНИЕ(t,5,y);


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

дом(x,y)<-крыша(x,y,r,f), этаж(x,y,f);

этаж(x,y,f)<-СЛОЖЕНИЕ(y,20,z),квадр(x,y,f,z);

крыша(x,y,r,f)<-СЛОЖЕНИЕ(r,10,y),СЛОЖЕНИЕ(x,20,f),

треуг(x,y,r,f);

треуг(x,y,z,t)<-ЛИНИЯ(x,y,t,y,1),ДЕЛЕНИЕ2(x,t,f),угол(x,y,z,t,f);

угол(x,y,z,t,f)<-ЛИНИЯ(x,y,f,z,1),ЛИНИЯ(f,z,t,y,1);

ДЕЛЕНИЕ2(x,t,f)<-СЛОЖЕНИЕ(x,t,r),ДЕЛЕНИЕ(r,2,f);

квадр(x,y,z,t)<-ЛИНИЯ(x,y,x,t,1),ЛИНИЯ(x,y,z,y,1),ч2(x,y,z,t);

ч2(x,y,z,t)<-ЛИНИЯ(x,t,z,t,1),ЛИНИЯ(z,y,z,t,1);.

птица(x,y)<-взмах(x,y),птица(x,y);

взмах(x,y)<-вниз(x,y,1),вниз(x,y,0),вверх(x,y,1),вверх(x,y,0);

вниз(x,y,c)<-сдв(x,y,z,t,u,v),ЛИНИЯ(z,y,u,y,1);

вверх(x,y)<-сдв(x,y,z,t,u,v),

ЛИНИЯ(x,y,z,t,1),ЛИНИЯ(x,y,u,v,1);

сдв(x,y,z,t,u,v)<-сдп(x,y,z,t),сдл(x,y,u,v);

сдп(x,y,z,t)<-СЛОЖЕНИЕ(x,5,z),СЛОЖЕНИЕ(t,5,y);

сдл(x,y,z,t)<-СЛОЖЕНИЕ(z,5,x),СЛОЖЕНИЕ(t,5,y);


В ответ на вопрос:


?дом(70,110),птица(120,50);


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

^

8. Обработка списков.



На практике часто встречаются задачи, связанные с перечислением объектов. Для описания таких объектов используются списки. Например, список учеников первого класса: [Саша,Петя,Дима,Ксюша,Лена,Оля,Катя].

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


[Челябинск(0),Миасс(2),Златоуст(5),Вязовая(5),Усть-Катав(2), Аша(2), Уфа(20),Абдулино(3),Самара(20),Сызрань(2),Инза(2),

Рузаевка(10), Потьма(2), Рязань(5), Москва(0)].


Примером списка, состоящего из списков, может служить прямоугольная таблица (матрица), представляющая собой список строк, каждая из которых список элементов в данной строке. Например, таблица: 23 45 56 2 78 89 66 45 56 12 3 75 2 3 6 5 2 1 56 2 5 8 9 22 23 22 33 5 6 9 1 33 может быть представлена следующим списком, состоящим из списков:

[[23,45,56,2,78,89,66,45],[56,12,3,75,2,3,6,5],

[2,1,56,2,5,8,9,22],[2,1,56,2,5,8,9,22],[23,22,33,5,6,9,1,33]].


Во всех примерах квадратные скобки означают, что данный объект представляет собой список. Список может быть определен двумя способами: перечислением элементов списка, то есть так, как это было сделано выше и определением головы и хвоста списка. Например, список [X|Y] определен именно таким путем. X - это голова списка, а Y - его хвост. Различные шаблоны определяют различное внутреннее представление.

Шаблону [x,y] соответствует внутреннее представление

СПИСОК

/ \

x СПИСОК

/ \

y [ ]


Шаблону [x|y] соответствует внутреннее представление:


СПИСОК

/ \

x y


Разные шаблоны - разные внутренние представления - обуславливают различия в унификации. Используя представление списка можно решить ряд задач.


^ Принадлежность элемента списку.

Эту задачу можно описать с помощью следующих выражений:

а). Основной случай можно сформулировать следующим образом:

терм Р принадлежит списку [X..Y], если P=X..

б). Рекурсивная ситуация описывается с помощью высказывания "терм Р принадлежит списку [X..Y], если Р принадлежит Y". На языке Пролог-Д эти два высказывания можно записать в виде двух предложений:


принадлежит(P,L)<- равно(L,[X|Y]),равно(P,X);

принадлежит(P,L)<- равно(L,[X|Y]),принадлежит(P,Y);.


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


элемент(P,[P|T]);

элемент(P,[X|Y])<- элемент(P,Y);.


^ Склеивание двух списков.

Эту задачу можно описать с помощью следующих выражений:

а). основная ситуация состоит в том, что если к пустому списку [ ] добавить список Р, то в результате получится Р.

б). рекурсивная ситуация состоит в том, что можно список Р добавить к концу списка С, если Р будет добавлен к хвосту С и затем присоединен к голове В. На Прологе-Д эти предикаты можно записать так:


добавить([],[P],[P]);

добавить(C,P,B)<- равно(C,[X,Y]),добавить(Y,P,Z), равно(B,[T,Z]);.


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


присоединить([],[P],[P]);

присоединить([X|Y],P,[X|T])<-присоединить(Y,P,T);.


Например, если задан вопрос к этой базе знаний:


?присоединить(L,[Джим |R],[Джек, Билл, Джим, Тим, Джим, Боб];,


то будут получены ответы:

L=[Джек, Билл] R=[Тим, Джим, Боб] L=[Джек, Билл, Джим, Тим] R=[Боб].


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




оставить комментарий
страница1/2
Серебрякова Т.А
Дата29.09.2011
Размер0.5 Mb.
ТипМетодические указания, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы:   1   2
плохо
  1
отлично
  2
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

Рейтинг@Mail.ru
наверх