transitive-closure相关内容

Prolog 图路径搜索与循环路径

我是 Prolog 的新手.我试图找出一个问题,我需要检查边缘之间是否存在路径.我完成了循环的非循环图形代码,我的代码将进入无限循环. path(Start, End) :- edge(Start, End).路径(开始,结束):- 边缘(开始,Z),路径(Z,结束). 我需要通过定义一个新的谓词来处理这种情况:新路径(开始,结束,路径)这应该消除无限循环.请让我知道如何进行. 解决方案 ..

Prolog中定义图:边和路径,查找两个顶点之间是否有路径

我对 Prolog 很陌生.我在 graph.pl 中定义了下图: 这是我的 Prolog 代码: edge(a,e).边缘(e,d).边(d,c).边缘(c,b).边(b,a).边(d,a).边缘(e,c).边(f,b).路径(X,X).路径(X,Y):- 边缘(X,Z);路径(Z,Y). 我是这样理解的:只有在顶点X之间有边时,顶点X和顶点Y之间才有路径code> 和顶点 Z 并且在 ..
发布时间:2022-01-12 10:07:18 其他开发

路径/小径/步行的定义

许多谓词定义某种非循环路径,该路径由通过二元关系定义的边构建,非常类似于定义传递闭包.因此需要一个通用的定义. 请注意,图论中定义的概念并不容易符合通常的预期.最值得注意的是,我们对边的名称不感兴趣. 更糟糕的是,图论也发生了一些变化,引入了 walk 的概念, 注意到 传统上,路径指的是现在通常称为开放式步行的路径.如今,当没有任何限定的情况下,路径通常被理解为简单,这意味着没 ..

如何表达“祖先"?递归地

我坚持使用这个递归,它不像我预期的那样工作. 我的错误在哪里? #!/usr/bin/prolog% 事实母亲(珍妮,米歇尔).%曾祖母、祖父母亲(吉纳维芙,欧宾).% 祖母、父亲母亲(艾琳,阿兰).%曾祖母、祖父母亲(艾米丽,科莱特).%曾祖母、祖母母亲(科莱特,穆丽尔).% 祖母、母亲母亲(穆里尔,夏娃).% 妈妈,女儿父亲(约瑟夫,米歇尔).% 曾祖父、祖父父亲(米歇尔,欧宾).% ..
发布时间:2021-07-05 19:21:41 其他开发

为什么在定义转换两个原子关系的谓词时会出现堆栈限制超出错误?

我想知道为什么在这些情况下程序会无限递归: ?- 爱(凯,阿曼达). 和 ?- love(rob, amanda). 这是代码: 爱(阿曼达,凯).爱(凯,地理).爱(地理,抢劫).爱(X,Y): -爱(X,Z),爱(Z,Y).爱(X,Y): -爱(Y,X). 解决方案 首先,您的程序总是进入无限循环.无论您使用什么名称.甚至 ?- love(amanda, kay). 循环.为了更 ..

如何表达“祖先"递归地

我坚持使用这种递归,但它不能按我的预期工作. 我的错误在哪里? #!/usr/bin/prolog% 事实母亲(珍妮,米歇尔).%曾祖母、祖父母亲(吉纳维芙,欧宾).% 祖母、父亲母亲(艾琳,阿兰).%曾祖母、祖父母亲(艾米丽,科莱特).%曾祖母、祖母母亲(科莱特,穆丽尔).% 祖母、母亲母亲(穆里尔,夏娃).% 妈妈,女儿父亲(约瑟夫,米歇尔).% 曾祖父、祖父父亲(米歇尔,欧宾).% ..
发布时间:2021-06-22 19:07:04 其他开发

无法理解为什么 prolog 无限循环

摘自 Bratko 的书,面向人工智能的 Prolog 编程(第 4版)我们有以下不起作用的代码 - anc4(X,Z):-anc4(X,Y),父(Y,Z).anc4(X,Z):-父(X,Z). 在本书第 55 页的图 2.15 中,显示 parent(Y,Z) 一直在调用,直到堆栈内存不足. 我不明白的是 prolog 对 anc4(X,Y) 进行递归调用,而不是先对父 (Y,Z) 进 ..
发布时间:2021-06-22 19:00:17 其他开发

一个无限的成功树,或者不是?

我得到了以下程序: edge(a,b).边(b,c).边(a,d).路径(N,M):- 路径(N,New),edge(New,M).路径(N,M):-边(N,M). 并询问是否将证明树算法应用于以下查询: ?- 路径(a,X). 证明树是无限成功树,还是无限失败树? 现在,在我看来,在构建树的过程中,您会陷入一遍又一遍地应用路径规则 1,创建一棵无限树并且永远不会达到路径规则 2.. ..
发布时间:2021-06-22 19:00:02 其他开发

序言中递归的停止条件

以下是我的知识库中的事实(http://www.doc.gold.ac.uk/~mas02gw/prolog_tutorial/prologpages/recursion.html(递归练习 2): 更高(鲍勃,迈克).% 鲍勃比迈克高更高(迈克,吉姆).% 迈克比吉姆高更高(吉姆,乔治).% 吉姆比乔治高 现在我想用递归来推断出明显“bob"比“george"高的东西. 我尝试添加此规 ..
发布时间:2021-06-22 18:58:37 其他开发

错误:在我的 Prolog 代码中超出本地堆栈

我无法弄清楚为什么来自给定 Prolog 代码的以下查询会生成错误 Out of local stack. 序言代码: 喜欢(g,c).喜欢(c,a).喜欢(c,b).喜欢(b,a).喜欢(b,d).喜欢(X,Z): - 喜欢(X,Y),喜欢(Y,Z). 查询 ?- 喜欢(g,X). 结果 X = c ;X = 一个;X = b;错误:超出本地堆栈 编辑 1 这是我认为 Prol ..
发布时间:2021-06-22 18:54:05 其他开发

如何表达传递关系

我想表达一种传递关系.如果 A 引用 B 和 B 引用 C,则 A 引用 C.我有这个: proj(A).项目(B).项目(C).参考(A,B).参考(B,C). 当我使用 proj(A) 查询时,我得到: [46] ?-proj(A). A = _639 “_639"是什么意思?我期待是或否,并得到了那种陌生感.我需要添加一条规则来说明: ref(A,C). 并得到 YE ..
发布时间:2021-06-22 18:50:59 其他开发

为什么我的序言规则陷入无限递归

我的代码按其预期目的工作,但最后总是卡在循环中,给我一个错误,提示“超出堆栈限制".我的代码如下: byCar(奥克兰,汉密尔顿).乘车(汉密尔顿,拉格兰).乘车(瓦尔蒙特,萨尔布吕肯).byCar(valmont,metz).乘火车(梅斯,法兰克福).乘火车(萨尔布吕肯,法兰克福).乘火车(梅斯,巴黎).乘火车(萨尔布吕肯,巴黎).byPlane(法兰克福,曼谷).byPlane(法兰克福,新 ..
发布时间:2021-06-22 18:48:43 其他开发

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

我有一个用户事实列表,定义为: 用户(@michael).用户(@ana).用户(@bob).用户(@george).用户(@约翰). 等等.此外,我有一组事实: follows(@michael,@ana).跟随(@ana,@bob).跟随(@bob,@michael). 我正在尝试编写一个关系indirect(user1,user1),它会告诉我user1 是否间接跟随user2.但是 ..
发布时间:2021-06-22 18:48:02 其他开发

更好地理解序言

我正在尝试了解 Prolog 及其使用的解析算法.我找到了这个例子: 讨厌(1, 2).讨厌(2, 3).讨厌(3, 4).嫉妒(A,B): - 嫉妒(A,C),嫉妒(C,B).嫉妒(A,B): - 讨厌(A,B). 但是当我试图说 jealous(1,4) 然后它不断溢出并且永远不会产生真,这很奇怪,好像 1 讨厌 2 和 2 讨厌 3 并且 3 讨厌 4,然后1也应该讨厌4. 但是我 ..
发布时间:2021-06-22 18:47:17 其他开发

序言中对称关系的传递闭包

我是 prolog 初学者,我想创建“兄弟"关系. 关系应该是对称的,如果 brother(alin, alex) 为真,brother(alex, alin) 也应该如此. 它也应该是可传递的,如果 brother(alin, alex) 和 brother(alex, claudiu) 为真,brother(alin, claudiu) 也应该如此. 结合to属性,如果bro ..
发布时间:2021-06-22 18:45:33 其他开发

自反传递闭包的定义

许多谓词本质上使用某种形式的传递闭包,却发现终止也必须被解决.为什么不使用 closure0/3 一劳永逸地解决这个问题: :- meta_predicateclosure0(2,?,?).:- meta_predicate 闭包(2,?,?).:- meta_predicateclosure0(2,?,?,+).% 内部的关闭0(R_2,X0,X): -关闭0(R_2,X0,X,[X0]).关 ..

SQL-将非空邻接列表转换为路径

我正在处理代表文件系统的一些表,我需要选择每个文件夹的完整路径作为扁平字符串. 第一张表列出了每个文件夹的详细信息: CREATE TABLE文件夹(FolderID int IDENTITY(1,1)NOT NULL,[名称] nvarchar(255)非空) 第二张表列出了文件夹关系的可传递关闭: CREATE TABLE FolderClosures(FolderClosu ..
发布时间:2021-05-07 19:11:11 数据库

JQ,将CSV(父子格式)转换为JSON,另一个问题

这是另一篇文章的续篇: JQ,将CSV(父子格式)转换为JSON 您好,很抱歉再次询问.我试图获得以下格式,但没有成功.真的很感谢您的一些建议.我附上图片以显示其在层次结构视图中的外观以层次结构方式显示的图片,也许更容易.希望有可能吗? *** CSV文件***** id,parent_id,大小 主题,空,1 分析,主题,1 聚类,分析,1 集聚集群,集群1 合并边缘,群集2 动画 ..
发布时间:2021-02-12 20:49:05 其他开发

Prolog,确定图是否为非循环

我需要定义一个谓词acyclic/1,该谓词将一个图作为输入并确定该图是否是非循环的.因此,根据我的理解 graph1(a,b). graph1(b,c). graph1(c,a). 将返回否,并且 graph2(a,b). graph2(b,c). 将返回是 我做了一个谓词,以确定图中是否有2个节点连接在一起,如果连接,它们将返回是. isConnected ..