Новичок
Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.3.2009
Репутация: нет Всего: нет
|
Есть решение этой задачи на VisualProlog, но мне нужно на обычном TurboProlog2.0. Может кто-нибудь с этим помочь??? Вот код на VisualProlog: Цитата | DOMAINS где = левый_берег; правый_берег состояние = состояние(где,где,где,где) путь = состояние*
PREDICATES nondeterm перемещение(состояние,состояние) nondeterm путь(состояние,состояние,путь,путь) nondeterm движение(состояние,состояние) nondeterm смена_состояния(где,где) nondeterm запрещенное_состояние(состояние) nondeterm существо(состояние,путь) nondeterm write_путь(путь) nondeterm write_move(состояние,состояние)
CLAUSES
перемещение(S,G):- путь(S,G,[S],L), nl,write("Решение:"), nl,write_путь(L). перемещение(_,_). путь(G,G,T,T). путь(S,G,L,L1):- движение(S,S1), not( запрещенное_состояние(S1) ), not( существо(S1,L) ), путь( S1,G,[S1|L],L1).
движение(состояние(X,X,G,C),состояние(Y,Y,G,C)):-смена_состояния(X,Y). /* Фермер + волк */ движение(состояние(X,W,X,C),состояние(Y,W,Y,C)):-смена_состояния(X,Y). /* Фермер + коза */ движение(состояние(X,W,G,X),состояние(Y,W,G,Y)):-смена_состояния(X,Y). /* Фермер + капуста */ движение(состояние(X,W,G,C),состояние(Y,W,G,C)):-смена_состояния(X,Y). /* только фермер */
смена_состояния(левый_берег,правый_берег). смена_состояния(правый_берег,левый_берег). запрещенное_состояние( состояние(F,X,X,_) ):- смена_состояния(F,X). /* Волк ест козу*/ запрещенное_состояние( состояние(F,_,X,X) ):- смена_состояния(F,X). /* Коза ест капусту */ существо(X,[X|_]). существо(X,[_|L]):-существо(X,L).
write_move( состояние(X,W,G,C), состояние(Y,W,G,C) ) :-!, write("Фермер переплывает реку с "), write(X), write(" на "), write(Y),nl. write_move( состояние(X,X,G,C), состояние(Y,Y,G,C) ) :-!, write("Фермер перевозит волка с "), write(X), write(" реки на "), write(Y),nl. write_move( состояние(X,W,X,C), состояние(Y,W,Y,C) ) :-!, write("Фермер перевозит козу с " ), write(X), write(" реки на "), write(Y),nl. write_move( состояние(X,W,G,X), состояние(Y,W,G,Y) ) :-!, write("Фермер перевозит капусту с "), write(X), write(" реки на "), write(Y),nl. write_путь( [H1,H2|T] ) :- write_move(H1,H2), write_путь([H2|T]). GOAL перемещение(состояние(левый_берег,левый_берег,левый_берег,левый_берег),состояние(правый_берег,правый_берег,правый_берег,правый_берег)).
|
Надо перевести на TurboProlog2.0 Помогите кто сможет
|