Как реализовать проблему кувшина с водой в 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).