Информатика -продвинутый курс


         

РЕШЕНИЕ ЛОГИЧЕСКИХ ЗАДАЧ НА ПРОЛОГЕ - часть 3


 

Например, правило

сосуды(0, W) :- сосуды(V, W).

означает, что вся вода из первого сосуда вылита. Обратим внимание на слово «вода» в условии задачи. Для предметной области, связанной с водой, характерно то, что воду можно просто выливать, и данное правило перехода между состояниями допустимо. Если бы задача решалась для молока, то его выливать было бы нельзя, и такое правило было бы недопустимым !

Правило

сосуды(3, W) :- сосуды(V, W). означает, что первый сосуд заполнен полностью.

Не разливая, жидкость можно перелить из одного сосуда в другой только так, что один станет пустым, а другой наполнится. Это можно записать в виде правил

сосуды(3,W):- сосуды(V,W-V+3).

сосуды(V,0):- cocyды(V-W,W).

сосуды(V,5): - cocуды(V-W+5,W).

сосуды(0,W):- сосуды(V,W-V).

При решении данной задачи необходимо также избежать повторения одних и тех же состояний - «переливания из пустого в порожнее». Для этого в предикат «сосуды ( )» следует добавить 3-й аргумент - список пройденных состояний П. Элементы в него будут добавляться парами:

сосуды(V1,W1,[V1,W1|П]):- не_принад(V1,W1,П), сосуды(V2,W2,П).

Условие, ограничивающее рекурсию, должно иметь вид:

сосуды(_,4,П) :- write_list(П).




Содержание  Назад  Вперед