Скачиваний:
12
Добавлен:
01.05.2014
Размер:
31.74 Кб
Скачать

Программа сбора всех доступных сокровищ

doroga('вход','бар').

doroga('вход','фонтан').

doroga('фонтан','монстры').

doroga('фонтан','выход').

doroga('бар','монстры').

doroga('фонтан','золото').

doroga('бар','серебро').

doroga('клад','монстры').

doroga('алмазы','выход').

doroga('разбойники','золото').

doroga1(X,Y):-doroga(X,Y).

doroga1(X,Y):-doroga(Y,X).

nenado(['монстры','разбойники']).

sokrov(['золото','алмазы','серебро','клад']).

prinadl(Z,[Z|_]).

prinadl(Z,[_|X]):-prinadl(Z,X).

first([First|_],First).

addsp([],Sp,Sp).

addsp([X|Sp1],Sp2,[X|Sp3]):-addsp(Sp1,Sp2,Sp3).

delfirst([_|M],M).

pechat([]):-!.

pechat([X|Tail]):-

pechat(Tail),

write(X),

write('-').

puty(Kom1,Kom2,Marsh,Marshr):-

doroga1(Kom1,Kom2),Marshr=[Kom2|Marsh].

puty(Kom1,Kom2,Marsh,Marshr):-

doroga1(Kom1,Kom),nenado(Monstrs),

not(prinadl(Kom,Monstrs)),not(prinadl(Kom,Marsh)),

puty(Kom,Kom2,[Kom|Marsh],Marshr).

gosokr:-

sokrov(Sokr),marsh(M),prinadl(S,Sokr),not(prinadl(S,M)),

first(M,Last),puty(Last,S,[Last],M1),retract(marsh(_)),

delfirst(M,M_),addsp(M1,M_,M2),assert(marsh(M2)),!,

gosokr,fail.

gos:-assert(marsh(['вход'])),gosokr.

gos:-retract(marsh(M)),first(M,Last),

puty(Last,'выход',[Last],M1),delfirst(M,M_),addsp(M1,M_,M2),

write(' Маршрутом '),nl,pechat(M2),nl,

write(' Cсобрали:'),sokrov(Sokr),!,

prinadl(S,Sokr),prinadl(S,M2),write(S),write(' '),fail.

go:-gos.

go.

Пример:

?- go.

Маршрутом

вход-фонтан-золото-фонтан-выход-алмазы-выход-фонтан-вход-бар-серебро-бар-вход-фонтан-выход

Cобрали:золото алмазы серебро

yes

Соседние файлы в папке ARI_DOC