我目前解决了Prolog中的水壶问题,但我遇到了如何运行该程序的问题。有谁可以帮助我吗。提前谢谢。
错误未定义的过程:state / 1,
但是,有state/2
database
rstate(integer,integer)
predicates
state(integer,integer)
clauses
state(2,_).
state(0,0):-
not(rstate(0,0)),
assert(rstate(0,0)),
state(0,0).
state(X,Y):-
X < 4,
not(rstate(4,Y)),
assert(rstate(4,Y)),
write("\n Rule 1 => (4,",Y,")"),
state(4,Y).
state(X,Y):-
Y < 3,
not(rstate(X,3)),
assert(rstate(X,3)),
write("\n Rule 2 => (",X,",3)"),
state(X,3).
state(X,Y):-
X>0,
not(rstate(0,Y)),
assert(rstate(0,Y)),
write("\n Rule 5 => (0,",Y,")"),
state(0,Y).
state(X,Y):-
Y>0,
not(rstate(X,0)),
assert(rstate(X,0)),
write("\n Rule 6 => (",X,",0)"),
state(X,0).
state(X,Y):-
X+Y >= 4,
Y > 0,
Z=Y-(4-X),
not(rstate(4,Z)),
assert(rstate(4,Z)),
write("\n Rule 7 => (4,",Z,")"),
state(4,Z).
state(X,Y):-
X+Y >= 3,
X>0,
Z=X-(3-Y),
not(rstate(Z,3)),
assert(rstate(Z,3)),
write("\n Rule 8 => (",Z,",3)"),
state(Z,3).
state(X,Y):-
X+Y <= 4,
Y > 0,
Z=X+Y,
not(rstate(Z,0)),
assert(rstate(Z,0)),
write("\n Rule 9 => (",Z,",0)"),
state(Z,0).
state(X,Y):-
X+Y <= 3,
X>0,
Z=X+Y,
not(rstate(0,Z)),
assert(rstate(0,Z)),
write("\n Rule 10 => (0,",Z,")"),
state(0,Z).
state(X,Y):-
X=0,
Y=2,
not(rstate(2,0)),
assert(rstate(2,0)),
write("\n Rule 11 => (2,0)"),
state(2,0).
state(X,Y):-
X=2,
assert(rstate(0,Y)),
write("\n Rule 12 => (0,",Y,")"),
state(0,Y).
goal
makewindow(1,2,3,"Water Jug Problem",0,0,25,80),
write("Initially state(0,0)"),
state(0,0),
save("output.txt").
OUTPUT
Initially state(0,0)
Rule 1 => (4,0)
Rule 2 => (4,3)
Rule 5 => (0,3)
Rule 9 => (3,0)
Rule 2 => (3,3)
Rule 7 => (4,2)
Rule 5 => (0,2)
Rule 9 => (2,0)
Press the SPACE bar
output.txt
rstate(0,0)
rstate(4,0)
rstate(4,3)
rstate(0,3)
rstate(3,0)
rstate(3,3)
rstate(4,2)
rstate(0,2)
rstate(2,0)
答案 0 :(得分:1)
<强>提示强>:
错误未定义的过程:state / 1
表示您尝试仅使用一个参数执行state
查询,例如state(12).
您定义的所有state
规则都有2个参数,例如state(2,_).
,state(0,0).
和state(X,Y).
您尚未定义state(X).
之类的内容,因此当您尝试执行该查询时,您会收到未定义的过程错误。
您必须使用两个参数执行state
查询(state/2
意味着什么) - &gt;你在括号中需要两个数字;执行state(0,2).