Составители:
Рубрика:
23
Программа 16
DOMAINS
LOC = east ; west /* описание берегов */
STATE = state(LOC,LOC,LOC,LOC) /* описание положения объектов */
PATH = STATE* /* список состояний */
PREDICATES
go(STATE,STATE) /* запуск алгоритма */
path(STATE,STATE,PATH,PATH) /* поиск пути к новому состоянию */
move(STATE,STATE) /* переход от состояния к состоянию */
opposite(LOC,LOC) /* описание противоположных сторон */
unsafe(STATE) /* описание опасных состояний */
member(STATE,PATH) /* было ли такое состояние ? */
write_path(PATH) /* вывод ответа */
write_move(STATE,STATE) /* распечатка хода */
GOAL
go(state(east,east,east,east),state(west,west,west,west)),
write(“solved press any key to continue”),
readchar(_),
exit.
CLAUSES
go(S,G):-
path(S,G,[S],L),
nl,write(“A solution is:”),nl,
write_path(L),
fail.
go(_,_).
path(S,G,L,L1):- move(S,S1), not( unsafe(S1) ), not( member(S1,L) ),
path( S1,G,[S1|L],L1),!.
path(G,G,T,T):- !. /* Конечное состояние найдено, список L копируется в L1*/
move(state(X,X,G,C),state(Y,Y,G,C)):-opposite(X,Y). /* мужик и волк */
move(state(X,W,X,C),state(Y,W,Y,C)):-opposite(X,Y). /* мужик и коза */
move(state(X,W,G,X),state(Y,W,G,Y)):-opposite(X,Y). /* мужик и капуста */
move(state(X,W,G,C),state(Y,W,G,C)):-opposite(X,Y). /* один мужик */
opposite(east,west).
opposite(west,east):-!. /* описание противоположных сторон */
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »