Лекция: Объемы(8,5,3).

решение:-перелить(8,0,0,[]).

перелить(4,4,0,_пройденные):-write(_пройденные).

минимум(_x,_y,_x):-_x=<_y,!.

Минимум(_x,_y,_y).

принадлежит(_x,[_x|_]):-!.

принадлежит(_x,[_y|_l]):-!, принадлежит(_x,_l),!.

%1->2

перелить(_в_первом,_во_втором,_в_третьем, _пройденные):-

Объемы(_объем1,_объем2,_объем3),

_в_первом>0,

_свободно is _объем2-_во_втором,

_свободно>0,

Минимум(_в_первом,_свободно, _количество),

_стало_в_первом is _в_первом-_количество,

_стало_во_втором is _во_втором+_количество,

_новое=сост(_стало_в_первом,_стало_во_втором,_в_третьем),

Not(принадлежит(_новое,_пройденные)),

перелить(_стало_в_первом,_стало_во_втором,_в_третьем,[_новое|_пройденные]).

 

ЗАДАНИЕ 4.1

Допишите оставшиеся правила допустимого переливания. Проверьте правильность работы программы, задав вопрос ?-решение.

Другой вариант решения той же задачи:

Объемы(8,5,3).

Исходное(состояние(8,0,0)).

Цель(состояние(4,4,0)).

решение:-исходное(_s), перелить([_s]).

перелить([_s|_p]):- цель(_s), отобразить_решение([_s|_p]).

перелить([состояние(_1,_2,_3)|_p]):-

Допустимо(_1,_2,_3,_n1,_n2,_n3),g

Not(принадлежит(состояние(_n1,_n2,_n3),

[состояние(_1,_2,_3)|_p])),

перелить([состояние(_n1,_n2,_n3),

состояние(_1,_2,_3)|_p]).

перелито(_1,_2,_f,_n1,_n2):- минимум(_1,_f,_k), _n1 is _1 — _k,_n2 is _2 + _k.

минимум(_x,_y,_x):-_x=<_y,!.

Минимум(_x,_y,_y).

принадлежит(_x,[_x|_]):-!.

принадлежит(_x,[_y|_l]):-!, принадлежит(_x,_l),!.

отобразить_решение([]):-!.

отобразить_решение([_x|_l]):-отобразить_решение(_l),!,write(_x),nl.

%1->2

допустимо(_1,_2,_3,_n1,_n2,_3):-

_1>0, объемы(_v1,_v2,_v3),

_f is _v2-_2,

_f>0,

Перелито(_1,_2,_f,_n1,_n2).

 

еще рефераты
Еще работы по информатике