Лабораторные работы по прологу


predicates
bogatyr(symbol)
im(symbol,symbol,symbol,symbol)
ap(symbol,symbol,symbol,symbol)
ms(symbol,symbol,symbol,symbol)
dn(symbol,symbol,symbol,symbol)
v

raznoe(symbol,symbol,symbol,symbol)
clauses
bogatyr(ubil).
bogatyr(ne_ubil).
raznoe(Im,Ap,Ms,Dn):-
Ap=ubil,Im=ne_ubil,Ms=ne_ubil,Dn=ne_ubil.
raznoe(Im,Ap,Ms,Dn):-
Ap=ne_ubil,Im=ubil,Ms=ne_ubil,Dn=ne_ubil.
raznoe(Im,Ap,Ms,Dn):-
Ap=ne_ubil,Im=ne_ubil,Ms=ubil,Dn=ne_ubil.
raznoe(Im,Ap,Ms,Dn):-
Ap=ne_ubil,Im=ne_ubil,Ms=ne_ubil,Dn=ubil.
im(Im,Ap,Ms,Dn):-
Ap=ubil,Im=ne_ubil,Ms=ne_ubil,Dn=ne_ubil.

ap(Im,Ap,Ms,Dn):-
Ap=ne_ubil,Im=ne_ubil,Ms=ubil,Dn=ne_ubil.

ms(Im,Ap,Ms,Dn):-
raznoe(Im,Ap,Ms,Dn),
Ms=ne_ubil.

dn(Im,Ap,Ms,Dn):-
raznoe(Im,Ap,Ms,Dn),
Dn=ne_ubil.

v:-
bogatyr(Im),
bogatyr(Ap),
bogatyr(Ms),
bogatyr(Dn),
not(im(Im,Ap,Ms,Dn)),
not(ap(Im,Ap,Ms,Dn)),
not(ms(Im,Ap,Ms,Dn)),
dn(Im,Ap,Ms,Dn),
write(«Илья Муромец «,Im,»\nАлеша Попович «,Ap,»\nМикула Селянович «,Ms,»\nДобрыня Никитич «,Dn,»\n»).

v:-
bogatyr(Im),
bogatyr(Ap),
bogatyr(Ms),
bogatyr(Dn),
not(im(Im,Ap,Ms,Dn)),
not(ap(Im,Ap,Ms,Dn)),
ms(Im,Ap,Ms,Dn),
not(dn(Im,Ap,Ms,Dn)),
write(«Илья Муромец «,Im,»\nАлеша Попович «,Ap,»\nМикула Селянович «,Ms,»\nДобрыня Никитич «,Dn,»\n»).

v:-
bogatyr(Im),
bogatyr(Ap),
bogatyr(Ms),
bogatyr(Dn),
not(im(Im,Ap,Ms,Dn)),
ap(Im,Ap,Ms,Dn),
not(ms(Im,Ap,Ms,Dn)),
not(dn(Im,Ap,Ms,Dn)),
write(«Илья Муромец «,Im,»\nАлеша Попович «,Ap,»\nМикула Селянович «,Ms,»\nДобрыня Никитич «,Dn,»\n»).

v:-
bogatyr(Im),
bogatyr(Ap),
bogatyr(Ms),
bogatyr(Dn),
im(Im,Ap,Ms,Dn),
not(ap(Im,Ap,Ms,Dn)),
not(ms(Im,Ap,Ms,Dn)),
not(dn(Im,Ap,Ms,Dn)),
write(«Илья Муромец «,Im,»\nАлеша Попович «,Ap,»\nМикула Селянович «,Ms,»\nДобрыня Никитич «,Dn,»\n»).

goal

v.

/* create_tree (A, B) помещает A в поле данных одноузлового
дерева B
insert_left (A, B, C) вставляет A как левое поддерево B
и присваивает результат C
insert_right (A, B, C) вставляет A как правое поддерево
B и присваивает результат C */

domains
treetype = tree (integer, treetype, treetype); empty ()
predicates
create_tree (integer, treetype)
insert_left (treetype, treetype, treetype)
insert_right (treetype, treetype, treetype)
obhodLVL(treetype,integer,integer)
run
clauses

create_tree (A, tree (A, empty, empty)).
insert_left (X, tree (A, _, B), tree (A, X, B)).
insert_right (X, tree (A, B, _), tree (A, B, X)).
obhodLVL(empty,_,_):-true.
obhodLVL(tree(Item,Left,Right),N,V):-
NItem,
write(«[«,Item,»] «),
fail.

obhodLVL(tree (_,Left,Right),N,V):-
obhodLVL(Left,N,V),
obhodLVL(Right,N,V).
run:-
%создание одноузловых деревьев
create_tree (6, A),
create_tree (12, B),%12
create_tree (1, C),
create_tree (7, D),
create_tree (14, E),%14
create_tree (11, F),%11
create_tree (8, G),
create_tree (5, H),
create_tree (21, J),%21
create_tree (3, K),
create_tree (4, L),

% соединение дерева
insert_left(H,D,D1),
insert_right(J,D1,D2),% D2 — 7
insert_left(K,E,E1), % E1 — 14
insert_left(D2,B,B1),
insert_right(E1,B1,B2), % B2 — 12
insert_right(L,F,F1), % F1 — 11
insert_left(F1,C,C1),
insert_right(G,C1,C2), % C2 — 1
insert_right(C2,A,A1),
insert_left(B2,A1,A2),
% A2 вершина
% функция обхода дерева + вывод, две цифры минимум и максимум.. сравнение строгое
obhodLVL(A2,1,10).
goal
run.

domains
database
xpositive(symbol,symbol)
xnegative(symbol,symbol)

predicates

begin_analis
result
ask(symbol,symbol)
problem_is(symbol)
% it_is(symbol)
positive(symbol,symbol)
negative(symbol,symbol)
remember(symbol,symbol,symbol)
clear_db

clauses
% Пользовтельский интерфейс
begin_analis :-
nl,write(«|||||||Диагностика неисправностей сетевого подключения.|||||||»),
nl,write(«Отвечайте на вопросы системы о причинах неисправностей yes — да, no — нет:»),
nl,nl,
result,
exit.
result :-
problem_is(X),!,nl,
write(«Неисправность: «,X,».»),nl,
clear_db.
result :-
nl,write(«Неисправность оборудования невозможно определить. «),
clear_db.

ask(X,Y) :-
write(X, » «, Y,» ?»),
readln(Reply),
remember(X,Y,Reply).

% механизм вывода
positive(X,Y) :-
xpositive(X,Y),!.
positive(X,Y) :-
not(negative(X,Y)),!,
ask(X,Y).

negative(X,Y) :-
xnegative(X,Y),!.

remember(X,Y,yes) :-
asserta(xpositive(X,Y)). % Добавление положительного ответа
remember(X,Y,no) :-
asserta(xnegative(X,Y)), % Добавление отрицательного ответа
fail.

clear_db :-
retract(xpositive(_,_)), % Удаление положительных ответов
fail.
clear_db :-
retract(xnegative(_,_)), % Удаление отрицательных ответов
fail.

% Продукционные правила
problem_is(«Не введен DNS, введите 192,168,1,254») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),
positive(«наличие»,»локального подключения на компьютере»),
positive(«наличие»,»интернет соединения на компьютере»),
positive(«наличие»,»введенных данных IP»),!.
% positive(«отсутствие»,»введеных DNS»),!.

problem_is(«Не введен IP, введите 192,168,1,1») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),
positive(«наличие»,»локального подключения на компьютере»),
positive(«наличие»,»интернет соединения на компьютере»),!.
% positive(«отсутствие»,»введенных данных IP»),!.

problem_is(«Создайте интернет соединение на компьютере») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),
positive(«наличие»,»локального подключения на компьютере»),!.
% positive(«отсутствие»,»интернет соединения на компьютере»), !.

problem_is(«Возможно у Вас физическая проблема с оборудованием(модем,сетевая карта, провод)») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),!.
% positive(«отсутствие»,»локального подключения на компьютере»),!.

problem_is(«Подключите провода») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),!.
% positive(«отсутствие»,»подключения модема к телефонной сети и сети питания»),!.

problem_is(«Проверьте сетевой кабель») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),!.
% positive(«отсутствие»,»работающего индикатора сетевой карты»),!.

problem_is(«Проведите оплату») :-

positive(«отсутствие»,»загрузки страниц в браузере»),!.
% positive(«отсутствие»,»оплаты интернета»),!.

goal

begin_analis.

domains
database
xpositive(symbol,symbol)
xnegative(symbol,symbol)

predicates

begin_analis
result
ask(symbol,symbol)
problem_is(symbol)
% it_is(symbol)
positive(symbol,symbol)
negative(symbol,symbol)
remember(symbol,symbol,symbol)
clear_db

clauses
% Пользовтельский интерфейс
begin_analis :-
nl,write(«|||||||Диагностика неисправностей сетевого подключения.|||||||»),
nl,write(«Отвечайте на вопросы системы о причинах неисправностей yes — да, no — нет:»),
nl,nl,
result,
exit.
result :-
problem_is(X),!,nl,
write(«Неисправность: «,X,».»),nl,
clear_db.
result :-
nl,write(«Неисправность оборудования невозможно определить. «),
clear_db.

ask(X,Y) :-
write(X, » «, Y,» ?»),
readln(Reply),
remember(X,Y,Reply).

% механизм вывода
positive(X,Y) :-
xpositive(X,Y),!.
positive(X,Y) :-
not(negative(X,Y)),!,
ask(X,Y).

negative(X,Y) :-
xnegative(X,Y),!.

remember(X,Y,yes) :-
asserta(xpositive(X,Y)). % Добавление положительного ответа
remember(X,Y,no) :-
asserta(xnegative(X,Y)), % Добавление отрицательного ответа
fail.

clear_db :-
retract(xpositive(_,_)), % Удаление положительных ответов
fail.
clear_db :-
retract(xnegative(_,_)), % Удаление отрицательных ответов
fail.

% Продукционные правила
problem_is(«Не введен DNS, введите 192,168,1,254») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),
positive(«наличие»,»локального подключения на компьютере»),
positive(«наличие»,»интернет соединения на компьютере»),
positive(«наличие»,»введенных данных IP»),!.
% positive(«отсутствие»,»введеных DNS»),!.

problem_is(«Не введен IP, введите 192,168,1,1») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),
positive(«наличие»,»локального подключения на компьютере»),
positive(«наличие»,»интернет соединения на компьютере»),!.
% positive(«отсутствие»,»введенных данных IP»),!.

problem_is(«Создайте интернет соединение на компьютере») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),
positive(«наличие»,»локального подключения на компьютере»),!.
% positive(«отсутствие»,»интернет соединения на компьютере»), !.

problem_is(«Возможно у Вас физическая проблема с оборудованием(модем,сетевая карта, провод)») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),
positive(«наличие»,»подключения модема к телефонной сети и сети питания»),!.
% positive(«отсутствие»,»локального подключения на компьютере»),!.

problem_is(«Подключите провода») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),
positive(«наличие»,»работающего индикатора сетевой карты»),!.
% positive(«отсутствие»,»подключения модема к телефонной сети и сети питания»),!.

problem_is(«Проверьте сетевой кабель») :-

positive(«отсутствие»,»загрузки страниц в браузере»),
positive(«наличие»,»оплаты интернета»),!.
% positive(«отсутствие»,»работающего индикатора сетевой карты»),!.

problem_is(«Проведите оплату») :-

positive(«отсутствие»,»загрузки страниц в браузере»),!.
% positive(«отсутствие»,»оплаты интернета»),!.

goal

begin_analis.

predicates
igrok(symbol)
liga_1(symbol)
liga_2(symbol)
liga_3(symbol)
vizov(symbol, symbol)
vizov1(symbol, symbol)

clauses
igrok(sergey).
igrok(dmitriy).
igrok(valera).
igrok(petr).
igrok(mihail).
igrok(nikolay).
igrok(alex).
igrok(alexandr).
igrok(kostya).
igrok(barbara).
igrok(anna).
igrok(tatiana).

liga_1(sergey).
liga_1(dmitriy).
liga_1(valera).
liga_1(petr).

liga_2(mihail).
liga_2(nikolay).
liga_2(alex).
liga_2(alexandr).

liga_3(kostya).
liga_3(barbara).
liga_3(anna).
liga_3(tatiana).

vizov (X, Y):-
igrok(X),
igrok(Y),
liga_1(X),
X<>Y,
not (liga_2(Y)),
not (liga_3(Y)).

vizov1 (X, Y):-
igrok(X),
igrok(Y),
X<>Y,
liga_1(X),
not (vizov (X,Y)),
not (liga_1(Y)),
not (liga_3(Y)).

/*vizov (X, Y):-
igrok(X),
igrok(Y),
liga_2(X),
X<>Y,
not (liga_1(Y)).

vizov (X, Y):-
igrok(X),
igrok(Y),
liga_3(X),
X<>Y,
liga_3(Y).*/

goal
vizov(What, Whom);
vizov1(What, Whom).

predicates
athl (symbol)
basket (symbol)
crypt (symbol)
game (symbol)
play (symbol, symbol)

clauses

athl (kolya).
athl (anton).
athl (vova).

basket (vova).
basket (anton).

crypt (kolya).
crypt (anton).
crypt (vova).

game (football).

play (X, Y):-
athl(X),
basket(X),
game(Y).

play (X, Y):-
crypt(X),
game(Y).

goal
play(What, Whom).

predicates
athl (symbol)
basket (symbol)
crypt (symbol)
play (symbol)

clauses

athl (kolya).
athl (anton).

basket (kolya).
basket (anton).

crypt (kolya).
crypt (vova).

play (X):-
athl(X), !,
basket(X).

play (X):-
crypt(X).

goal
play(What).

predicates
athl (symbol)
basket (symbol)
crypt (symbol)
play (symbol)

clauses

athl (kolya).
athl (anton).

basket (kolya).
basket (anton).

crypt (kolya).
crypt (vova).

play (X):-
crypt(X).

play (X):-
athl(X), !,
basket(X).

goal
play(What).

Загрузка...