Лабораторная работа на языке Prolog / laba3 / Лаба №3 / Отчет лаба№3
.doc -
Нижегородский Государственный Технический Университет
Факультет информационных систем и технологий
Кафедра “Компьютерные технологии в проектировании и производстве”
ПРЕДСТАВЛЕНИЕ ЗНАНИЙ В ИНФОРМАЦИОННЫХ СИСТЕМАХ
Лабораторная работа №3
Выполнил:студент гр. 01-СБК
Ситников И.А.
Проверил: Волков М.Б.
г. Нижний Новгород
2003 г.
Цель работы: Ознакомиться c моделями знаний в форме семантических сетей, фреймов, условно-логических моделей, построенными на основе графов. Получить навыки программирования подобных моделей на языке Visual Prolog 5.0.
Задания к работе:
Составить программу на Visual Prolog реализующую поиск путей в графах.
DOMAINS
список=symbol*
PREDICATES
% путь(нач вершина,конечн вершина,исходн граф,искомый путь,огран длины пути).
nondeterm путь(symbol,symbol,список,список,integer).
% путь1(некотр вершина,путь в исх графе,исх граф,список,integer).
nondeterm путь1(symbol,список,список,список,integer).
nondeterm принадлежит(symbol,symbol,список).
nondeterm граф(список).
nondeterm смежные(symbol,symbol,список).
CLAUSES
%описание ветвей графа и пар смежных узлов
граф([a,b,b,d,b,c,c,d,c,e,e,d,d,a,e,b]).%факт1
путь(A,Z,Граф,Путь,Номер):-путь1(A,[Z],Граф,Путь,Номер).%пр1
путь1(A,[A|Путь1],_,Путь1,_). % факт 2
%основное правило поиска пути:
путь1(A,[Z|Путь1],Граф,Путь,Номер):-Номер>0,
смежные(Y,Z,Граф),
not(принадлежит(Y,Z,Путь1)),
Номер1=Номер-1,
путь1(A,[Y,Y,Z|Путь1],Граф,Путь,Номер1).%пр2
смежные(Y,Z,Граф):-принадлежит(Y,Z,Граф);
принадлежит(Z,Y,Граф).%пр3
%принадлежность двух элементов списку
принадлежит(Y,Z,[Y,Z|_]).%факт3
принадлежит(Y,Z,[_,_|Хвост]):-принадлежит(Y,Z,Хвост).%пр4
GOAL
граф(Граф), путь(a,e,Граф,Путь,3).
/*
Граф=["a","b","b","d","b","c","c","d","c","e","e","d","d","a","e","b"], Путь=["a","b","b","c","c","e"]
Граф=["a","b","b","d","b","c","c","d","c","e","e","d","d","a","e","b"], Путь=["a","d","d","c","c","e"]
Граф=["a","b","b","d","b","c","c","d","c","e","e","d","d","a","e","b"], Путь=["a","b","b","d","d","e"]
Граф=["a","b","b","d","b","c","c","d","c","e","e","d","d","a","e","b"], Путь=["a","d","d","e"]
Граф=["a","b","b","d","b","c","c","d","c","e","e","d","d","a","e","b"], Путь=["a","b","b","e"]
Граф=["a","b","b","d","b","c","c","d","c","e","e","d","d","a","e","b"], Путь=["a","d","d","b","b","e"]
6 Solutions
*/
Составить программу, моделирующую семантическую сеть.
Программа примет следующий вид:
PREDICATES
nondeterm является(symbol,symbol).
nondeterm есть(symbol,symbol).
nondeterm для(symbol,symbol).
nondeterm что_делает(symbol,symbol).
CLAUSES
%доспех является защитой
является(доспех,защита).
%Связываем методы различных уровней
является(Ребенок,Родитель) :- есть(Ребенок,Родитель).
%шлем есть доспех
есть(шлем,доспех).
%шлем предназначен для защиты головы
для(защита_головы,шлем).
%доспех предназначен для защиты тела
для(защита_тела,доспех).
%защита служит спасением жизни
что_делает(спасает_жизнь,защита).
%Связываем св-ва различных уровней
что_делает(Свойство,Объект):-для(Свойство,Объект).
%Наследственность
что_делает(Свойство,Объект) :- является(Объект,Объект1),
что_делает(Свойство,Объект1).
GOAL
%что_делает(A,шлем).
/* A=защита_головы
A=защита_тела
A=спасает_жизнь
3 Solutions
*/
для(A,доспех).
/* A=защита_тела
1 Solution
*/
Составить программу, моделирующую фрейм.
PREDICATES
nondeterm фрейм(symbol,symbol,symbol).
CLAUSES
фрейм(человек,ако,млекопитающее).
фрейм(человек,умеет,мыслить).
фрейм(тинейджер,ако,человек).
фрейм(тинейджер ,возраст,"13-19 лет").
фрейм(тинейджер,любит,развлекаться).
фрейм(студент,ако, тинейджер ).
фрейм(студент,учится,"ВУЗ").
фрейм(студент,возраст,"17-23 лет").
фрейм(студент,сдает,сессию).
фрейм(Название,Слот,Значение):-фрейм(Название,ако,Значение_ако),
фрейм(Значение_ако,Слот,Значение).
GOAL
фрейм(студент,умеет,Что_умеет).
% Что_умеет=мыслить
Вывод: В результате выполнения работы мы познакомились c моделями знаний в форме семантических сетей, фреймов, условно-логических моделей, построенных на основе графов. Получили навыки программирования подобных моделей на языке Visual Prolog.