首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在prolog中知道全真

如何在prolog中知道全真
EN

Stack Overflow用户
提问于 2015-02-28 01:28:19
回答 2查看 61关注 0票数 0

刚开始学习Prolog,不知道如何得到包含"all true“的结果,例如:

代码语言:javascript
复制
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是可证明的,仍然不知道怎么做。你知道怎么做吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-28 06:28:20

将另一个条件添加到使用否定的takeAction/1谓词中:

代码语言:javascript
复制
takeAction(X) :-
    action(X),
    preAction(X, Y),
    action(Y),
    \+ (preAction(X, Z), \+ action(Z)).

最后一行指示您希望排除XZ的预操作,但Z不是操作的情况(action(3)为false)。

票数 0
EN

Stack Overflow用户

发布于 2015-02-28 07:22:56

您测试每个preAction(X,Y)都有一个操作(X):

代码语言:javascript
复制
takeAction(X) :- 
   action(X), 
   forall(preAction(X, Y), action(Y)).
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28770883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档