刚刚开始学习Prolog,并且无法弄清楚如何获得涉及"所有真实"的结果,例如:
preAction(4, 3).
preAction(4, 2).
preAction(2, 1).
action(4).
action(2).
action(1).
takeAction(X) :-
action(X),
preAction(X, Y),
action(Y).
预期结果为2,因为action(2)
和action(1)
都是真的。
但是当前结果是4和2.但是{4}的preAction
是(3,2)并且没有action(3)
。这不是我想要的。
如果我试图使用否定,因为4的preAction是可证明的,但仍然无法弄清楚如何去做。你知道怎么做吗?
答案 0 :(得分:0)
您为使用否定的takeAction/1
谓词添加了另一个条件:
takeAction(X) :-
action(X),
preAction(X, Y),
action(Y),
\+ (preAction(X, Z), \+ action(Z)).
最后一行表示您要排除 X
是Z
的预先行动的案例,但Z
不是行动({ {1}}是假的。
答案 1 :(得分:0)
您测试每个preAction(X,Y)都有一个动作(X):
takeAction(X) :-
action(X),
forall(preAction(X, Y), action(Y)).