您好我的if语句有问题。我有这个
final(C1-W1,C2-W2,C3-W3):-
retractall(end_jug),
asserta( end_jug(C1,W1) ),
asserta( end_jug(C2,W2) ),
asserta( end_jug(C3,W3) ).
和这一个
katastasi(L) :-
findall(X-W, jug(X,W), L0), sort(L0,L).
我怎么能检查????:
if(jug(C1,W1) == end_jug(C1,W1) && jug(C2,W2) == end_jug(C2,W2) && jug(C3,W3) == end_jug(C3,W3)) write('Congrats').
提前致谢!!
答案 0 :(得分:2)
像这样:
is_final_state :-
katastasi(S), writeln(S),
S=[C1-W1,C2-W2,C3-W3],
( end_jug(C1,W1),
end_jug(C2,W2),
end_jug(C3,W3)
-> writeln('Congrats!')
; W1+W2+W3 < 6
-> writeln('WARNING: not enough water left!'),
fail
).
你应该提到your previous question。这段代码是答案中代码的一部分。
您的代码在Prolog中,但您询问的检查是在“基本”中。放开基本心态。 :) Prolog为你做检查,作为统一的一部分。
上面代码中的值6
应该根据用户在游戏开始时调用final
指定的最终值来计算。可以检索最终值(每个end_jug
事实),就像jug
谓词检索当前值(每个jugsState
事实)一样(我假设现在称为{{1} }})。
现在你必须通过编写katastasi
谓词完成你的游戏,该谓词应该进行清理(即对所有断言的事实调用stop
)。您甚至可以制作retract
谓词。 :)
答案 1 :(得分:0)
在新谓词下写下,
加入的条件:
win(C1, W1, C2, W2, C3, W3):-
jug(C1,W1) \== end_jug(C1,W1),
jug(C2,W2) \== end_jug(C2,W2),
jug(C3,W3) \== end_jug(C3,W3).
然后在需要时使用此谓词。
finish(C1, W1, C2, W2, C3, W3):-
win(C1, W1, C2, W2, C3, W3),
write('Congrats').
或者整体写下来:
finish(C1, W1, C2, W2, C3, W3):-
jug(C1,W1) \== end_jug(C1,W1),
jug(C2,W2) \== end_jug(C2,W2),
jug(C3,W3) \== end_jug(C3,W3),
write('Congrats').