АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Контрольный пример. Простейшая программа на языке Пролог

Читайте также:
  1. X. примерный перечень вопросов к итоговой аттестации
  2. Буду на работе с драконом примерно до 21:00.
  3. Булевы функции. Способы задания. Примеры.
  4. В некоторых странах, например в США, президента заменяет вице-
  5. В примере
  6. В странах Востока (на примере Индии и Китая)
  7. Вания. Одной из таких областей является, например, регулирова-
  8. Вашим сообщениям, например, спеть «С днем рождения»
  9. Виды знания. Контрпример стандартному пониманию знания
  10. Власть примера. Влияние с помощью харизмы
  11. Внешний долг (внешняя задолженность): пример России
  12. Вопрос 11. Герои романтических поэм М. Ю. Лермонтова (на примере одного произведения).

 

Простейшая программа на языке Пролог.

 

man(nikolay).

man(stepan).

woman(lida).

 

parent(lida, stepan).

parent(nikolay, stepan).

 

mother(X,Y):-parent(X,Y),woman(X).

 

 

Задание к работе

 

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

2. Составить программу, которая описывает родственные отношения.

В качестве фактов описать унарные отношения: мужчина, женщина; и бинарные: состоят_в_браке, родитель_ребенок.

Записать правила, которые определяют следующие отношения: муж, жена, родитель, ребенок, сын, дочь, брат, сестра, дядя, тетя, бабушка, дедушка.

3. Подобрать тестовые данные, проверяющие все полученные отношения. Тестовые данные должны содержать операции «И», «ИЛИ», «НЕ».

4. Оформить отчет о проделанной работе.

 

 

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

Использование рекурсивных правил и структурированных данных

Цель работы

Научиться использовать структурированные типы данных и рекурсивные правила при решении задач.

 

Задание для подготовки к работе

Изучить темы «Рекурсивные правила», «Структурированные данные».

 

Порядок выполнения работы

1. Выполнить контрольные примеры.

2. Создать в системе программу, которая решает задачи согласно варианту.

3. Модифицировать программу CH06EX03.pro и подобрать цели иллюстрирующие структуру данных.

4. Составить отчет о проделанной работе.

 

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

1. Исходные тексты программ на языке Пролог.

2. Наборы тестовых данных и результаты работы программ.

3. Перечень и анализ ошибок.

4. Выводы по работе.

 

Основные понятия

Определения отношений, в которых используется само отношение, называется рекурсивным. Рекурсия – один из фундаментальных механизмов программирования на Прологе. Рекурсию можно применять для достижения такого же эффекта, какой реализуется при употреблении итеративных управляющих конструкций (циклов) в процедурных языках. Примером использования рекурсии может служить определение отношения «предок» [1, 2]. Данное отношение можно выразить с помощью двух правил. Первое правило будет определять непосредственных предков, а второе – отдаленных. Первое правило легко сформулировать через отношение «родитель»:

 

предок(X, Z):- родитель(X, Z).

 

Аналогичным образом можно попытаться сформулировать второе правило:

 

предок(X, Z):- родитель(X, Z).

предок(X, Z):- родитель(X, Y), родитель(Y, Z).

предок(X, Z):- родитель(X, Y1), родитель(Y1, Y2), родитель(Y2, Z).

 

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

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

 

Для всех X и Z,

X – предок Z, если

существует Y, такой, что

X – родитель Y и

Y – предок Z.

 

или на языке Пролог:

 

предок(X, Z):- родитель(X, Y), предок(Y, Z).

 

Таким образом, определение отношения «предок» будет выглядеть следующим образом:

 

предок(X, Z):- родитель(X, Z).

предок(X, Z):- родитель(X, Y), предок(Y, Z).

 

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

1) нерекурсивное правило, определяющее исходный вид отношения, т.е. вид отношения в момент прекращения рекурсии;

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

В приведенном выше определении отношения «предок» первая фраза определяет исходный вид этого отношения. Как только она станет истинной, рекурсия прекратится. Вторая фраза – это рекурсивное правило. При каждом вызове данное правило поднимается на одно поколение вверх. Подцель «родитель(X, Y)» вырабатывает значение переменной Y, а в рекурсивной подцели «предок(Y, Z)» используется этот новый аргумент.

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

 

date (11, january, 1978).

 

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

 

date (Day, january, 1978).

 

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

 

human(sergei, ivanov, date(10, may, 1975)).

human(ivan, petrov, date(15, october, 1969)).

 

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

 

human(FirstName, LastName, _). % запрос, перечисляющий всех людей из базы данных

human (FirstName, LastName, date(_, _, 1975). % все люди, родившиеся в 1975 году

birthday(human(_, _, Date), Date). % запрос, позволяющий найти человека по указанной дате рождения.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)