Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сии лаба2.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
200 Кб
Скачать
☆

Заключение

В заключение выделим основные понятия первой главы. Итак, про­грамма на Прологе представляет собой базу знаний о некоторой пред­метной области и имеет структуру, представленную на рис. 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,