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

Рассмотрим еще один пример программы на языке Visual Prolog.

/* программа "Студенты" */

DOMAINS

student = string

facultet = string

gruppa = integer

FACTS

студент(student,gruppa)

наим_фак(integer,facultet)

группа(gruppa)

CLAUSES

/* определение отношения "группа" с помощью фактов*/

группа(943).

группа(843).

группа(232).

/* определение отношения "студент" с помощью фактов*/

студент("Орлова Л.И.", 943).

студент("Семенова М.П.", 232).

студент("Цуканова В.В.", 943).

/* определение отношения "наименование факультета"

с помощью фактов */

наим_фак(1,"РТФ").

наим_фак(2,"ФЭ").

наим_фак(3,"ФАИТУ").

наим_фак(4,"ФВТ").

наим_фак(7,"ИЭФ").

PREDICATES

nondeterm факультет(gruppa, facultet)

вторая_цифра(gruppa,integer)

CLAUSES

/* определение отношения "факультет" с помощью правила*/

факультет(NG,F):- вторая_цифра(NG,G2),

наим_фак(G2,F).

/* определение отношения "вторая цифра" с помощью правила */

вторая_цифра(NG,G2):- Gl = NG mod 100,

G2 = Gl div 10.

GOAL

группа(Gruppa),студент(Student, Gruppa);

студент(Studentl,Gruppal),

факультет(Gruppal, Facultetl).

Программа на языке Visual Prolog имеет структуру, состоящую из следующих разделов:

DOMAINS /*описание типов данных*/

DATABASE (FACTS) /*описание предикатов

динамической базы данных*/ PREDICATES /*описание предикатов */

CLAUSES /*утверждения: факты и правила */

GOAL /* вопросы пользователя */

В разделе DOMAINS программист определяет классы объектов, за­давая их символические имена, и с помощью стандартных типов данных описывает их свойства. Например, классы объектов типа "студент", "фа­культет", "группа" задаются следующим образом:

DOMAINS

student = string facultet = string

gruppa = integer

Таким образом, в этом разделе программист создает свои типы (об­ласти - DOMAINS) данных.

В разделах PREDICATES, DATABASE (FACTS) описываются образ­цы предикатов, а именно: задаются имена предикатов, число их аргумен­тов, смысл аргументов с помощью имен классов. Например:

PREDICATES

nondeterm факультет(gruppa, facultet)

вторая__цифра (gruppa, integer)

Такое описание показывает, что в предикате факультет первым ар­гументом является номер группы, а вторым - наименование факультета. Ключевые слова determ и nondeterm в описании предиката означают, что предикат может быть согласован с базой знаний соответственно один раз или много раз.

Различие PREDICATES и DATABASE в том, что в DATABASE опи­сываются предикаты динамической базы данных, состоящей только из фактов, которые можно добавлять, удалять и изменять в процессе выпол­нения программы. Раздел PREDICATES содержит описание фактов и за­головков правил, однако соответствующие этим описаниям утверждения нельзя динамически изменять.

Раздел CLAUSES содержит собственно программу, т. е. все факты и пра­вила, описывающие предметную область и составляющие базу знаний.

В программе могут присутствовать несколько утверждений, описы­вающих одно и то же отношение. Все они являются возможными различ­ными вариантами описания этого отношения. Таким образом, совокуп­ность утверждений с одинаковыми заголовками, т. е. с одинаковым име­нем и тем же числом аргументов, называется определением отношения или процедурой. Утверждения одного определения отношения должны быть сгруппированы вместе. Все утверждения о предметной области (программа), находящиеся в области действия программы Пролога, назы­ваются базой знаний. Структура раздела (CLAUSES) утверждений программы на языке Пролог приведена на рис. 3.

Раздел GOAL содержит вопросы пользователя.

Классы объектов предметной области, введенные программистом, описываются с помощью следующих стандартных типов данных:

symbol - символическое имя (person,у,a,mas);

string - строка - любая последовательность символов в двойных ка­вычках ("Катрин", "Домодедово");

char - отдельный символ, заключенный в апострофы (‘R’, **’);

integer - целое число в диапазоне от -32768 до 32767;

byte - целое число в диапазоне от 0 до 255; word- целое число в диапазоне от 0 до 65535;

real - любое число, может быть представлено в экспоненциальной форме

Рис. 3. Структура раздела утверждений программы

Данные типа symbol в отличие от данных типа string запоминаются в таблице символов. Таблица символов размещается в оперативной памя­ти, поэтому ее использование обеспечивает наиболее быстрый поиск. Однако для построения таблицы символов требуется дополнительное время.

.

1.8. Реляционный язык Пролог

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

Операция объединения строит одно «-арное отношение из двух я-арных отношений г и s. Новое отношение, которое обозначим r_union_s, является объединением г и s. Это отношение задается логиче­ской программой, состоящей из двух правил:

r_union_s (Х1,Х2,Хп) г(Х1,Х2,...,Хп) .

r_union_s (XI, Х2, ...,Xn) : - s (Х1,Х2,...,Хп) .

Пример:

блюдо(У):-мясо(Y).

блюдо (Y) :-рыба(Y) .

Из примера следует, что объединение отношений можно использовать для обощения знаний о предметной области.

О пределение симметрической разности использует понятие отри­цания:

А В = (А В) (А В).

r_diff_s(Xl,X2,...,Xn) :- r (Х1,Х2,...,Хп) ,

not s(Xl, X 2,..., X n) .

r_dif f_s (Xl,X2,..,Xn ):- s (Xl,X2,...,Xn) ,

not r(Xl,X2,...,Xn) .

Пример:

футболист_либо_волейболист(X) :- футболист(X),

not волейболист(X).

футболист_либо_волейболист(X):- волейболист(X),

not футболист (X).

Декартово произведение г_x_s может быть определено одним правилом:

r_x_s(Xl, Х2,., .. …, Xm,, Yl,, Y2,.., Yn) : -

r(Xl, Х2, ..., Хт),

s (Yl, Y2,Yn) .

Пример:

/* Определение отношения "обед" */

обед(X,Y,Z):-закуска(X), блюдо(У), десерт(г).

Проекция состоит в построении отношения, использующего лишь не­которые аргументы исходного отношения: г13(Х1, ХЗ):- г(XI, Х2, ХЗ).

Пример:

аптека(6, "Циолковского, 7", "44-67-57").

телефон_аптеки(NomApt, TelApt):-

аптека(NomApt, __, TelApt).

Чтобы получить выборку, достаточно в теле правила записать условия отбора:

rv(XIв ХЗ):- r(XI, Х2, ХЗ), Х2>Х1.

Пример:

аптека(6, "Циолковского, 7", "44-67-57"). телефон_аптеки(NomApt, TelApt):-

аптека(NomApt, _, TelApt),

NomApt < 8 .

/*Определение отношения сбалансированный обед*/

сбалансированный_обед(X,Y,Z):-обед(X,Y,Z),

значение(X,Y,Z,V),

V<800.

Операция соединения двух или нескольких отношений определяется следующим образом:

/* определение отношения "факультет" с помопхью правила */

факультет(NG,F):-вторая_дифра(NG,G2),

наим_фак(G2,F).

Здесь два отношения связаны общей переменной G2.

Теоретический материал этого пункта поможет вам выполнить первое контрольное задание, в котором вы должны с помощью фактов создать базу данных и с помощью правил определить запросы к ней.