|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Контрольный пример. Простейшая программа на языке Пролог
Простейшая программа на языке Пролог.
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). % запрос, позволяющий найти человека по указанной дате рождения.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |