Prolog:从间接关系中消除循环

na899

我有一个定义为的用户事实列表:

user(@michael).
user(@ana).
user(@bob).
user(@george).
user(@john).

等等。此外,我有一组事实:

follows(@michael,@ana).
follows(@ana,@bob).
follows(@bob,@michael).

我正在尝试编写一个间接(user1,user1)关系,它将告诉我user1是否间接跟随user2。但是,我无法消除周期性关系。

就像在给定的示例中一样,michael-> ana-> bob-> michael将导致循环。

从indirect(user1,user2)的结果中消除这些周期的最佳方法是什么?

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

您可以制定一条规则,以传递到目前为止您已经“看到”的用户的额外列表,并忽略源自这些用户的以下信息:follows(A, B, Seen)

为此,定义一个“遵循传递”规则,该规则将实际规则包装起来,如下所示:

follows_tx(A, B) :- follows(A, B, []).

现在,您可以通过follows/3以下方式定义规则:

follows(A, B, Seen) :-
    not_member(B, Seen),
    follows(A, B).
follows(A, B, Seen) :-
    follows(A, X),
    not_member(X, Seen),
    follows(X, B, [A|Seen]).

基本子句说,如果存在有关A跟随B的事实,只要我们B之前从未见过,我们就认为该谓词已被证明

否则,我们将找到一个关注者A,通过选中来检查我们是否尚未看到该用户not_member/2,最后查看该用户是否B直接或间接关注了该用户

最后,这是定义的方式not_member

not_member(_, []).
not_member(X, [H|T]) :- dif(X, H), not_member(X, T).

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Prolog:从间接关系中消除循环

来自分类Dev

Laravel中的链接关系问题

来自分类Dev

调试合金中的链接关系声明

来自分类Dev

使用Symfony2中的Doctrine ORM注释将“间接关联”实体添加为成员

来自分类Dev

查询仅连接关系中的最后一行

来自分类Dev

Laravel 从表单创建或更新模型链接关系中的许多

来自分类Dev

原则获取间接关联的对象

来自分类Dev

渴望负载间接关联Rails

来自分类Dev

如何避免go.mod文件中的间接依赖关系

来自分类Dev

消除LINQ中的实体循环

来自分类Dev

如何消除R中的此循环

来自分类Dev

使用Scala消除Spark中的循环

来自分类Dev

如何消除R中的此循环

来自分类Dev

编译器设计 - 需要帮助从 CFG 中消除间接左递归

来自分类Dev

如何在mysql主表的单个查询中连接关系表中的值

来自分类Dev

当节点之间没有直接关系时,向Neo4j中的csvfile中的关系添加属性

来自分类Dev

春季启动JPA:在自连接关系中以JSON视图进行递归

来自分类Dev

连接表与cakephp中的主表没有直接关系

来自分类Dev

链接关系数据库中未知表的外键

来自分类Dev

在TDD中消除依赖关系有哪些好的方法?

来自分类Dev

在TDD中消除依赖关系有哪些好的方法?

来自分类Dev

用Ruby Object Mapper连接关系

来自分类Dev

SQLAlchemy会话和连接关系

来自分类Dev

Levenshtein距离与体重/惩罚的邻接关系

来自分类Dev

无法解析超链接关系的URL

来自分类Dev

Excel 文件的联接关系查询

来自分类Dev

如何消除路径中存在关系但路径中节点之间存在关系的路径?

来自分类Dev

如何消除路径外部存在关系但路径中节点之间存在关系的路径?

来自分类Dev

在Prolog元解释器中循环

Related 相关文章

热门标签

归档