Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_по_Прологу.rtf
Скачиваний:
18
Добавлен:
27.03.2015
Размер:
349.03 Кб
Скачать

Содержание работы

1. Изучить материал, изложенный в литературе [3, с. 6-45].

2. Изучить методические указания к лабораторным работам № 1,2 (с. )

2. Выполнить задания, приведенные в данной лабораторной работе.

3. Оформить отчет.

4. Защитить лабораторную работу, ответив на контрольные вопросы.

Содержание отчета

1. Тексты задания.

2. Тексты программ.

3. Результаты выполнения.

  1. Схема поиска решения или пояснения к полученным результатам.

Методические указания

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

Задания

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

predicates

phone_number(symbol,symbol)

clauses

phone_number(“Albert”,”ETY-3665”) .

phone_number(“Betty”,”555-5233”).

phone_number(“Carol”,”909-1010”).

phone_number(“Dororty”,”438-8400”).

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

  1. phone_number(“Carol”, Number)

  2. phone_number(Who,”438-8400”)

  3. phone_number(“Albert”, Number)

  4. phone_number(Who,Number)

Теперь измените предложения. Предположим, что Kim и Dorothy имеют один и тот же номер телефона. Добавьте этот факт в секцию clauses и введите цель:

phone_number(Who,”438-8400”)

  1. Наберите эту программу в окне редактора

predicates

isletter(char)

clauses

isletter(Ch): - 'a'<= Ch, Ch<='z'.

isletter(Ch): - 'A'<=Ch, Ch<='Z'.

Запустите программу и испытайте по очереди каждую из этих целей:

  1. isletter('x')

  2. isletter('2')

  3. isletter('hello')

  4. isletter(a)

  5. isletter(X)

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

3. Наберите следующую программу в окне редактора

predicates

can_buy(symol,symbol) /* может купить*/

person(symbol) /*человек*/

car(symbol) /*машина*/

likes(symbol,symbol) /*нравится*/

for_sale(symbol) /*продается*/

clauses

can_buy(Name, Model) : -

person(Name) and

car(Name) and

likes(Name, Model) and

for_sale(Model).

person (kelly).

person (judy).

car(lemon).

car(hot_rod).

likes(pizza, hot_rod).

likes(judy, pizza).

for_sale (pizza).

for_sale (lemon).

for_sale (hot_rod).

Что могут купить Judy и Kelly? Кто может купить hot_rod. На приглашение Goal в диалоговом окне вы можете задать следующие вопросы:

can_buy (Who, What) /* Who =? What = ? */

can_buy (judy, What) /* What =? */

can_buy (kelly, What) /* What =? */

can_buy (Who, hot_rod) /* Who =? */

Добавьте факты о стоимости машины и о текущих счетах в банке у Kelly, Judy и т.д. Измените правило покупки автомобиля с учетом этих фактов. Проверьте новую программу теми же вопросами, что и раньше. Пролог отвечает именно то, что вы и ждали?

4. Данное задание выполните в Турбо-Прологе. Считая, что отношение РОДИТЕЛЬ определено как

  • РОДИТЕЛЬ(пам,боб).

  • РОДИТЕЛЬ(том,боб).

  • РОДИТЕЛЬ(том,лиз).

  • РОДИТЕЛЬ(боб,энн).

  • РОДИТЕЛЬ(боб,пат).

  • РОДИТЕЛЬ(пам,джим).

а) найдите, какими будут ответы на следующие вопросы:

  • РОДИТЕЛЬ(джим,Х)

  • РОДИТЕЛЬ(Х,джим)

  • РОДИТЕЛЬ(пам,Х), РОДИТЕЛЬ(X,пат)

  • РОДИТЕЛЬ(пам,Х), РОДИТЕЛЬ(X,У). РОДИТЕЛЬ(У,джим)

б) сформулируйте на Прологе следующие вопросы об отношении РОДИТЕЛЬ;

  • Кто родитель Пат?

  • Есть ли у Лиз ребенок?

  • Кто является родителем родителя Пат?

в) Переведите следующие утверждения в правила на Прологе:

  • Всякий, кто имеет ребенка, - счастлив, введя одноаргу­ментное отношение СЧАСТЛИВ.

  • Всякий X, имеющий ребенка, у которого есть сестра или брат, имеет двух детей, введя новое отношение ИМЕТЬ_ДВУХ_ДЕТЕЙ.

  • Определите отношение ВНУК (Х,У), используя отношение РО­ДИТЕЛЬ.

  • Определите отношение ТЕТЯ (Х,У) через отношения РОДИТЕЛЬ и СЕСТРА.

Сформулируйте вопросы к вновь введенным правилам.

Контрольные вопросы

1. Что такое Пролог-программа?

2. Синтаксис и семантика Пролог - предложений.

3. Типы предложений Пролога, их назначение и декларатив­ный смысл.

4. Переменная, ее роль и область действия в Пролог - программе.

5. Что является результатом работы Пролог - программы? Как он формируется?

6. Структура программы в Турбо-Прологе (основные разделы), краткая характеристи­ка каждого раздела.

7. Согласование типов и преобразование типов в Турбо-Прологе.

Лабораторная работа №2

Разработка первой программы на Прологе

Цель работы

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

Содержание работы

1. Прочитать теоретический материал [1, с. 13-43], [2, c. 18-47] и методические указания.

2. Выполнить индивидуальное задание.

3. Оформить отчет.

4. Ответить на контрольные вопросы.

5. Защитить лабораторную работу.

Содержание отчета

1. Текст задания.

2. Описать декларативный смысл фактов и предложений разраба­тываемой программы.

3. Описать декларативный смысл целей и привести деревья поис­ка решения для поставленных целей.

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

Используя знания, полученные при выполнении первой лаборатор­ной работы, напишите свою первую программу по аналогии с ранее рассмотренными программами.

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

1. Программы на Прологе включают в себя фразы двух типов (также известных под названием "предложения"): факты и правила.

Факты соответствуют связям и свойствам, о которых вы (прог­раммист) знаете, что они всегда истинны.

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

2. Все правила в Прологе имеют две части: заголовок и тело, соединенные символом "if". Символ "if" можно заменить обозначением ":-". Заголовок содержит заключение правила. Тело - это множество (конъюнкция) условий, которые должны быть истинны, для то­го, чтобы Пролог мог доказать истинность заголовка правила.

Факт – это частный случай правила. Факт – это правило, состоящее из одного заголовка (не содержащее тала).

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

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

5. Программа на Турбо - Прологе имеет следующую общую структуру:

domains /* ...объявление доменов ... */

predicates /* ...объявление предикатов ... */

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

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

6. В секции clauses размещаются факты и правила, с которыми будет работать Турбо - Пролог, пытаясь доказать цель программы.

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

Объявление предиката имеет следующую форму:

predicates

predicateName (argument_ type1, argument_ type2, ..., argument_typeN)

Здесь argument_ type1, argument_ type2, ..., argument_typeN – либо стандартные домены, либо домены, объявленные вами в секции domains. Объявление домена аргумента и описание типа аргумента суть одно и то же.

8. Секция domains – это секция, в которой вы объявляете любые нестандартные домены, используемые вами для аргументов ваших пре­дикатов. Домены в Прологе являются аналогами типов в других язы­ках. Основными стандартными доменами Турбо - Пролога являются – char, integer, real, string, и symbol; более подробно стандартные домены описаны в следующих разделах. Основная форма объявления доменов имеет следующий вид:

domains

argument _type1, … , argument _typeN = < стандартный домен >

argument 1, … , argument N = < составной домен 1 >;

< составной домен 2 >;

<...>;

< составной домен N >.

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

10. Арность (размерность) предиката - это число принимаемых им аргументов. Два предиката с одним именем могут иметь различную арность. Предикаты с одним именем, но с различными версиями арности должны собираться вместе и в секции predicates, и в секции clauses; при этом предикаты с различными арностями (но с одним именем) рассматриваются как абсолютно разные.

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

ЗАГОЛОВОК : - <Подцель1>, <Подцель2>,…,<ПодцельN>.

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

12. Символ Пролога "if" отличается от "IF", используемых в других языках: правило Пролога работает в соответствии с условной формой then/if, тогда как оператор других языков IF работает в со­ответствии с условной формой if/then.

13. Менее часто используемыми секциями программ на Турбо-Прологе являются секции database и constans, а также различные глобальные (global) секции (секция database будет нами использоваться в следующей лабораторной работе).

Задания

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

а) название игрушек, цена которых не превышает 4 руб. и кото­рые подходят детям 5 лет;

б) название игрушек, которые подходят как детям 4 лет, так и детям 10 лет;

в) цены всех кубиков;

г) можно ли подобрать игрушку, любую, кроме мяча, подходящую ребенку 3 лет, и дополнительно мяч так,

чтобы суммарная стоимость покупки не превосходила 6 руб.;

д) название наиболее дорогих игрушек (цена которых отличается от самой дорогой игрушки не более чем на 1 руб.

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

а) можно было узнать, имеются ли в школе однофамильцы;

б) сколько отличников в таком-то классе и т.д.

3. Разработайте базу данных библиотеки с самыми типичными отношениями между объектами (поиск книг по автору, поиск автора по названию книги, должники и т.д).

4. Разработайте базу данных - городской транспорт. (Простей­ший вариант.)

5. Разработайте базу данных - лекарства. Необходимо учесть симптомы болезни, возраст больного, противопоказания, стоимость, наличие и т.д.

6. Разработайте базу данных - продукты (магазины, ассорти­мент, стоимость, фирма производитель и т.д.).

7. Разработайте базу данных - одежда (по аналогии с заданием 1) .

8. Разработайте базу данных - кафедра (списочный состав, чи­таемые курсы, время и место проведения занятий, взаимозаменяемость и т.д.).

Контрольные вопросы

1. Что такое унификация? Алгоритм унификации. Приведите при­меры.

2. Сравните операцию унификации с операцией присваивания в традиционных языках программирования.

3. Сравните вычислительные модели логического программирова­ния: Пролога и Турбо-Пролога.

4. Основной механизм управления в Прологе.

5. Дерево поиска решений. Способы обхода дерева. Влияет ли порядок правил и порядок целей в предложении на дерево поиска ре­шений.

Лабораторная работа №3

Внутренняя база данных Турбо - Пролога

Цель работы

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