Язык логического программирования ПРОЛОГ. Бураков М.В. - 26 стр.

UptoLike

Составители: 

24
unsafe( state(F,X,X,_) ):- opposite(F,X) /* волк съедает козу */
unsafe( state(F,_,X,X) ):- opposite(F,X). /* коза съедает капусту */
member(X,[X|_]).
member(X,[_|L]):-member(X,L) /* проверка состояний, которые уже были */
write_path( [H1,H2|T] ) :- !,
readchar(_), write_move(H1,H2), write_path([H2|T]).
write_path( [ ] ).
write_move( state(X,W,G,C), state(Y,W,G,C) ) :-!,
write(“ Мужик пересекает реку с”,X,” на “,Y),nl.
write_move( state(X,X,G,C), state(Y,Y,G,C) ) :-!,
write(“ Мужик везет волка с “,X,” берега на “,Y),nl.
write_move( state(X,W,X,C), state(Y,W,Y,C) ) :-!,
write(“ Мужик везет козу с”,X,” берега на “,Y),nl.
write_move( state(X,W,G,X), state(Y,W,G,Y) ) :-!,
write(“ Мужик везет капусту с “,X,” берега на “,Y),nl.
8. РЕШЕНИЕ ЛОГИЧЕСКИХ ЗАДАЧ
Способности к описанию логических задач являются наиболее силь-
ной стороной ПРОЛОГа.
Многие логические задачи связаны с рассмотрением нескольких ко-
нечных множеств с одинаковым количеством элементов, между кото-
рыми устанавливается взаимно-однозначное соответствие. На языке
Пролог эти множества можно описывать как базы данных, а зависимос-
ти между объектами устанавливать с помощью правил.
Рассмотрим простую логическую задачу.
Пример:
«В велосипедных гонках три первых места заняли Алеша, Петя и
Коля. Какое место занял каждый из них, если Петя занял не второе и не
третье место, а Коля – не третье?»
Решение задачи заключается в установлении зависимости между
спортсменами и местами, которую можно описать табл. 2 (прочерки
указывают известную информацию):