Member 12942988 Ответов: 1

Как реализовать проблему кувшина с водой в SWI-Prolog


Я попробовал проблему кувшина воды из 4 галлонов и 3 галлонов кувшина в SWI-Prolog, но она показывает мне ошибку, исключенную оператором. Поэтому я убедительно прошу вас, опытных людей, решить код проблемы кувшина с водой, который я упомянул ниже.

Что я уже пробовал:

Я приложил код, пожалуйста, любезно взгляните на него.
visited_state(целое число,integer).


состояние(целое число,integer).


состояние(2,0).

состояние(X,Y):- X (",4,",",Y,")\n"),
состояние(4,Y).


состояние(X,Y):- Y (",X,",",3,")\н"),
состояние(X,3).

состояние(X,Y):- X > 0,
not(visited_state(0,Y)),
assert(visited_state(X,Y)),
напишите("опорожните 4-галлонный кувшин на землю: (", X,",",Y") -->

(", 0,",",Y,")\n"),
состояние(0,Y).

состояние(X,Y):- Y > 0,
not(visited_state(X,0)),
assert(visited_state(X,0)),
напишите("опорожните 3-галлонный кувшин на землю: (", X,",",Y") -->

(", X,",",0,")\н"),
состояние(X,0).

состояние(X,Y):- X + Y >= 4,
Y > 0,
NEW_Y - это Y - (4 - X),
not(visited_state(4,NEW_Y)),
assert(visited_state(X,Y)),
напишите("налейте воду из 3-Галлонного кувшина в 4-галлонный, пока она не станет

полный: (", X",", Y") --> (", 4,",",NEW_Y,")\n"),
состояние(4,NEW_Y).

состояние(X,Y):- X + Y >=3,
X > 0,
NEW_X - это X - (3 - Y),
not(visited_state(X,3)),
assert(visited_state(X,Y)),
напишите("налейте воду из 4-Галлонного кувшина в 3-галлонный, пока она не станет

полный: (", X,",",Y,") --> (", NEW_X,",",3,")\н"),
состояние(NEW_X,3).

состояние(X,Y):- X + Y 0,
NEW_X - это X + Y,
not(visited_state(NEW_X,0)),
assert(visited_state(X,Y)),
напишите("вылейте всю воду из 3-Галлонного кувшина в 4-галлонный:

(", X,",",Y,") --> (", NEW_X,",",0,")\н"),
состояние(NEW_X,0).

состояние(X,Y):- X+Y 0,
NEW_Y - это X + Y,
not(visited_state(0,NEW_Y)),
assert(visited_state(X,Y)),
напишите("вылейте всю воду из 4-Галлонного кувшина в 3-галлонный:

(", X",", Y") --> (", 0,",",NEW_Y,")\n"),
состояние(0,NEW_Y).

государство(0,2):- не(visited_state(2,0)),
утверждаю(visited_state(0,2)),
напишите("налейте 2 галлона из 3-Галлонного кувшина в 4-галлонный: (",

0,",",2,") --> (", 2,",",0,")\н"),
состояние(2,0).

state(2,Y):- not(visited_state(0,Y)),
assert(visited_state(2,Y)),
напишите("опорожните 2 галлона из 4-Галлонного кувшина на землю: (",

2,",",Y,") --> (", 0,",",Y,")\n"),
состояние(0,Y).

цель:-
makewindow(1,2,3,"4-3 проблема кувшина воды",0,0,25,80),
состояние(0,0).

1 Ответов

Рейтинг:
4

Member 13482196

Ошибка возникает из-за '<=', что неверно. На самом деле это должно быть " =<".


Member 12942988

Спасибо за ваш ответ