Лабораторная работа / volkov1
.docМинистерство образования Российской Федерации
Нижегородский государственный технический
университет
Кафедра “Компьютерные технологии в проектировании и производстве ”
Представление знаний в информационных системах
Лабораторная работа № 1
Выполнил:
студент гр. 02-КТ-2
Тимофеев Д.Л.
Проверил:
Волков М.Б.
Нижний Новгород
2004 г.
Цель работы
Ознакомиться с основами декларативной и процедурной части Prolog-программ.
Задание №1
Программа «Любить»
PREDICATES
nondeterm любить(symbol,symbol)
CLAUSES
любить(елена,теннис).%факт1
любить(джон,футбол).%факт2
любить(том,бейсбол).%факт3
любить(эрик,плавание).%факт4
любить(марк,теннис).%факт5
% любить(саша,_).%факт6 - саша любит все виды спорта
% любить(_,шахматы).%факт7 - все любят шахматы
%правило1
%любить(билл,Спорт):-любить(том, Спорт).
%правило2
%любить(ира,Что):-любить(том, Что),любить(марк,Что).
/*Ира любит те виды спорта, которые одновременно нарвятся тому и марку*/
%правило3
любить(ира,Что):-любить(эрик, Что);любить(том, Что).
%Ира любит теже виды спорта, которые нрвятся Эрику, но в тоже времы
%ей нравятся теже виды спорта, от которых безума Том
GOAL
любить(ира,Что).%цель1
/*
Редактирование запросов.
запрос 1
любить(билл,бейсбол).%факт3%правило1
yes
запрос 2
любить(билл,теннис).
no
запрос 3
любить(билл,Вид_спорта). %Какой вид спорта любит Билл?
Вид_спорта=бейсбол
запрос 4
любить(Кто,Вид_спорта).%Кто и что любит?
Кто=елена, Вид_спорта=теннис
Кто=джон, Вид_спорта=футбол
Кто=том, Вид_спорта=бейсбол
Кто=эрик, Вид_спорта=плавание
Кто=марк, Вид_спорта=теннис
Кто=билл, Вид_спорта=бейсбол
6 Solutions
запрос 5
любить(Кто,Кто). %Есть человек, у которого имя, звучит, как вид спорта?
No Solution
запрос 6
любить(_,_).%кто-то чего-то любит?
yes
запрос 7
любить(Кто,теннис),любить(билл, Что).
%Кто любит теннис, и что любит билл?
Кто=елена, Что=бейсбол
Кто=марк, Что=бейсбол
2 Solutions
запрнос 8
любить(Кто,теннис);любить(джон, Что)
%Кто любит теннис, или что любит Джон?
Кто=елена
Кто=марк
Что=футбол
3 Solutions
запрос 9
любить(Кто,теннис),любить(Кто, футбол)
%Кто любит теннис, и фитбол?
No Solution
*/
%***************************************************************************
/*
Редактирование базы правил и фактов.
%факты 1-6 , правило1
любить(Кто,теннис),любить(Кто, футбол)
%Кто любит теннис, и футбол?
Кто=саша
1 Solution
%факты 1-7, правило 1
%Саша любит шахматы?
любить(саша,шахматы).
yes %факт7
%факты 1-5, правило2
%Что любит ира
любить(ира,Что)
No Solution
%факты 1-5 правило 3
%Что любит ира
любить(ира,Что)
Что=плавание
Что=бейсбол
2 Solutions
*/
Задание 2
Электронная схема
PREDICATES
%элемент(наименование, обозначение, узел1, узел2)
nondeterm элемент(symbol, symbol, integer, integer)
%общий_узел(обозначение1, обозначение2, узел)
nondeterm общий_узел(symbol, symbol, integer)
%паралел_соед(элемент1, элемент2)
nondeterm паралел_соед(symbol, symbol)
%звезда(symbol,symbol,symbol,integer).
nondeterm звезда(symbol,symbol,symbol,integer).
%******************************************************************************
%***
%
CLAUSES
%элементы схемы
элемент(резистор, r1, 1 , 4).%факт1
элемент(резистор, r2, 3, 6).%факт2
элемент(резистор, r3, 1, 3).%факт3
элемент(источник, u1, 1, 2).%факт4
элемент(источник, u2, 2, 3).%факт5
элемент(лампочка, lamp1, 2, 5).%факт6
элемент(катушка, l1, 4, 5).%факт7
элемент(катушка, l2, 5, 6).%факт8
элемент(конденсатор, c1, 4, 5).%факт9
элемент(конденсатор, c2, 5, 6).%факт10
элемент(конденсатор, c3, 3, 6).%факт11
%Прввило общего узла - правило1
общий_узел(Elem1, Elem2, Num):-
элемент(_,Elem1,Num,_),элемент(_,Elem2,Num,_),Elem1<Elem2;
элемент(_,Elem1,Num,_),элемент(_,Elem2,_,Num),Elem1<Elem2;
элемент(_,Elem1,_,Num),элемент(_,Elem2,Num,_),Elem1<Elem2;
элемент(_,Elem1,_,Num),элемент(_,Elem2,_,Num),Elem1<Elem2.
%Правило паралелльного соединения - правило2
паралел_соед(Elem1,Elem2):-
элемент(_,Elem1,Num1,Num2),элемент(_,Elem2,Num1,Num2),Elem1<Elem2;
элемент(_,Elem1,Num1,Num2),элемент(_,Elem2,Num2,Num1),Elem1<Elem2.
%Правило Звезды - правило3
звезда(Elem1,Elem2,Elem3,Num):-
общий_узел(Elem1, Elem2, Num),общий_узел(Elem1, Elem3, Num),Elem2<Elem3.
%******************************************************************************
%***
%
GOAL
звезда(_,_,_,2).
/*
Запрос 1
элемент(резистор, r1, 1 , 4).
yes
Запрос2
элемент(резистор, r1, 2 , 4).
no
Запрос3
общий_узел(u2,r3,Num).
No Solution
Запрос4
общий_узел(r3,u2,Num).
Num=3
1 Solution
Запрос5
общий_узел(Elem1,Elem2,Num).
Elem1=r1, Elem2=r3, Num=1
Elem1=r1, Elem2=u1, Num=1
Elem1=r3, Elem2=u1, Num=1
Elem1=lamp1, Elem2=u2, Num=2
Elem1=c1, Elem2=l1, Num=4
Elem1=c2, Elem2=l2, Num=5
Elem1=c3, Elem2=r2, Num=3
Elem1=r2, Elem2=r3, Num=3
Elem1=r2, Elem2=u2, Num=3
Elem1=lamp1, Elem2=u1, Num=2
Elem1=l1, Elem2=r1, Num=4
Elem1=l2, Elem2=lamp1, Num=5
Elem1=c1, Elem2=r1, Num=4
Elem1=c2, Elem2=lamp1, Num=5
Elem1=c2, Elem2=l1, Num=5
Elem1=c3, Elem2=r3, Num=3
Elem1=c3, Elem2=u2, Num=3
Elem1=u1, Elem2=u2, Num=2
Elem1=l1, Elem2=l2, Num=5
Elem1=c1, Elem2=l2, Num=5
Elem1=c1, Elem2=c2, Num=5
Elem1=r3, Elem2=u2, Num=3
Elem1=l1, Elem2=lamp1, Num=5
Elem1=l2, Elem2=r2, Num=6
Elem1=c1, Elem2=lamp1, Num=5
Elem1=c1, Elem2=l1, Num=5
Elem1=c2, Elem2=r2, Num=6
Elem1=c2, Elem2=l2, Num=6
Elem1=c2, Elem2=c3, Num=6
Elem1=c3, Elem2=r2, Num=6
Elem1=c3, Elem2=l2, Num=6
31 Solutions
Запрос6
паралел_соед(_,c3).
результат выполнения
no
Запросс7
паралел_соед(First, Last).
результат
First=c1, Last=l1
First=c2, Last=l2
First=c3, Last=r2
3 Solutions
Запрос8
звезда(First, Second, Third,_).
результат
First=r1, Second=r3, Third=u1
First=c1, Second=l1, Third=r1
First=c2, Second=l2, Third=lamp1
First=c3, Second=r2, Third=r3
First=c3, Second=r2, Third=u2
First=r2, Second=r3, Third=u2
First=lamp1, Second=u1, Third=u2
First=c2, Second=l1, Third=l2
First=c2, Second=l1, Third=lamp1
First=c3, Second=r3, Third=u2
First=l1, Second=l2, Third=lamp1
First=c1, Second=l2, Third=lamp1
First=c1, Second=c2, Third=l2
First=c1, Second=c2, Third=lamp1
First=c1, Second=c2, Third=l1
First=c1, Second=l1, Third=l2
First=c1, Second=l1, Third=lamp1
First=c2, Second=l2, Third=r2
First=c2, Second=c3, Third=r2
First=c2, Second=c3, Third=l2
First=c3, Second=l2, Third=r2
21 Solutions
Запрос9
звезда(_,_,_,2).
резульат
yes
*/