- •1.1. Факты
- •Вопросы или целевые утверждения
- •Переменные
- •1.4. Правила
- •1.5. Конъюнкция целевых утверждений
- •Пополнение базы знаний
- •Структура программы на языке Visual Prolog
- •Заключение
- •Пример выполнения контрольного задания
- •"Среда",14,"з").
- •Контрольные вопросы
- •Контрольные задания
- •Предметная область "Кулинария ".
- •Предметная область "Студенты группы".
- •Предметная область "Поставщики продуктов".
- •Предметная область "Оценка деятельности преподавателя". Отношения-факты:
- •Предметная область "Шахматы".
- •Предметная область "Управление троллейбусами".
- •Предметная область "Междугородные переговоры". Отношения-факты:
Заключение
В заключение выделим основные понятия первой главы. Итак, программа на Прологе представляет собой базу знаний о некоторой предметной области и имеет структуру, представленную на рис. 3. Программа состоит из утверждений (фактов и правил) и их описаний. Совокупность утверждений, имеющих одинаковые имена отношений с одним и тем же числом аргументов (т. е. одинаковые заголовки), называется определением отношения или процедурой. Утверждения с одинаковыми именами, но с разным числом аргументов образуют разные уникальные определения в программе.
Элементарными составляющими утверждений являются предикаты со своими списками аргументов, описывающие отношения предметной области. Предикаты представляют собой логические функции, приобретающие значение (истина или ложь) в процессе выполнения программы. Их структура имеет вид:
<имя отношения>(<список аргументов>).
Элементами списка аргументов могут быть только термы, отделяющиеся друг от друга запятой.
Терм - это синтаксически правильная конструкция Пролога. Различают следующие типы термов: константы, переменные, списки, строки, структуры. Пока вы познакомились с константами и переменными. Все остальные типы будут рассматриваться в следующих главах. Программа начинает выполняться после ввода вопроса или целевого утверждения, которое записывается в форме предиката в разделе GOAL
<имя отношения»(<список аргументов»).
и формулирует цель решаемой задачи. В процессе выполнения устанавливается истинность или ложность поставленной цели.
Программирование на языке Пролог включает следующие этапы:
объявление фактов, задающих отношения между конкретными объектами или объектами и их свойствами;
определение правил о зависимости одних отношений или объектов от других;
формулировка цели решаемой задачи в виде вопроса (гипотезы, целевого утверждения).
Чтобы программу, написанную на базовом Прологе, адаптировать к языку Visual Prolog, необходимо выполнить следующее:
утверждения программы записать в разделе CLAUSES в соответствии с правилами: имена предикатов должны быть символическими именами; имена объектов предметной области - строками;
затем в разделе DOMAINS создать и описать свои типы данных, используя названия классов объектов;
в разделе PREDICATES описать предикаты программы, указав их имена и классы объектов, являющиеся аргументами предикатов;
в разделе FACTS или DATABASE описать только те факты, которые могут в процессе выполнения программы изменяться, удаляться и добавляться;
в разделе GOAL задать вопрос пользователя.
Пример выполнения контрольного задания
Задание. Описать предметную область "Расписание занятий" с помощью программы на языке Пролог.
Отношения-факты:
<группа>(<номер>,<факультет>,<число студентов>,
<староста>).
<дисциплина>(<шифр>,<название>,<количество часов>). <аудитория>(<номер>,<тип>,<число мест>).
<преподаватель>(<ФИО>,<кафедра>,<телефон>) . <расписание_занятий>(<номер_группы>,<шифр_дисциплины>,
<ФИО>, <номер_аудитории>,
<день_недели>, <время>,
<числитель/знаменатель>).
Отношения-правила: какие аудитории заняты в данное время, какие аудитории свободны в данное время, расписание занятий в заданное время, где находится преподаватель по расписанию, расписание занятий для заданной группы и т. д.
/* Пример выполнения задания */
DOMAINS
fio, fucultet, discip, tip, kaf, tel, denj, c_z = string
ngruppa ,kol_vo, shifr, nau, vremja = integer
PREDICATES
nondeterm группа(ngruppa, fucultet, kol_vo,fio)
nondeterm студент(fio, ngruppa)
nondeterm дисциплина(shifr, discip, kol_vo)
nondeterm аудитория(nau, tip, kol_vo)
nondeterm преподаватель(fio, kaf, tel)
nondeterm расписание_занятий(ngruppa, shifr,
fio, nau, denj, vremja, c_z)
nondeterm занята(denj, vremja, c_z, nau)
nondeterm свободна(denj, vremja, c_z, nau)
nondeterm расписание_заняшй_группы (ngruppa,
discip, fio, nau, denj, vremja, c_z)
nondeterm где_преподаватель(fio, denj, vremja,
c_z, nau)
CLAUSES
/* Определение отношений с помощью фактов */
/* определение отношения <группа>(<номер>,
<факультет>, <число студентов>, <староста>) */
группа(243,"ФВТ",23,"Карасев").
группа(244,"ФВТ",25,"Карев").
/* определение отношения <студент>(<ФИО>, <группа>) */
студент("Иванов",243).
студен*("Петров",243).
студент("Ивагин",243).
студент("Лунева",243).
студент("Волков",244).
студент("Мосин",244).
/* определение отношения <дисциплина>(<шифр>,
<название>, <количество часов>) */
дисциплина(1,"Математика",34).
дисциплина(2,"Физика",48).
дисциплина(3,"Информатика",56).
дисциплина(4,"Базы данных",48).
/* определение отношения <аудитория> (<номер>,
<тип>, <число мест>) */
аудитория(132,"ауд",30) .
аудитория(206,"лаб",300).
аудитория(403,"ауд",30).
аудитория(411,"ауд",10).
/* определение отношения <преподаватель>(<ФИ0>,
<кафедра>, <телефон>) */
преподаватель("Шевяков","ВПМ","723723").
преподаватель("Новичков","ВПМ","323723").
преподаватель("Швечкова","ВПМ","764589").
/* определение отношения
<расписание занятий> (<номер группы>, <шифр дисциплины>,
<ФИ0 преподавателя>,<номер аудитории>,
<день недели>,<время>,
<числитель/знаменатель>) */
расписание_эанятий(243,1,"Новиков",324,
"понедельник",8,"ч").
расписание_занятий(243,2,"Шерстов",306,
"понедельник",10,"ч").
расписание_занятий(243,3,"Новичков",306,
"понедельник",12,"ч").
расписание_занятий(243,4,"Шевяков",206,
"вторник",8,"ч”)
расписание_занятий(243,5,"Парфилова",134,
"вторник",10,"ч").
расписание_эанятий(243,4,"Шевяков",403,
"среда",12,"з").
расписание_занятий(243,5,"Парфилова",206,
