刚开始学习Prolog,不知道如何得到包含"all true“的结果,例如:
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是可证明的,仍然不知道怎么做。你知道怎么做吗?
发布于 2015-02-28 06:28:20
将另一个条件添加到使用否定的takeAction/1谓词中:
takeAction(X) :-
action(X),
preAction(X, Y),
action(Y),
\+ (preAction(X, Z), \+ action(Z)).最后一行指示您希望排除X是Z的预操作,但Z不是操作的情况(action(3)为false)。
发布于 2015-02-28 07:22:56
您测试每个preAction(X,Y)都有一个操作(X):
takeAction(X) :-
action(X),
forall(preAction(X, Y), action(Y)).https://stackoverflow.com/questions/28770883
复制相似问题