问题标签 [transitive-closure]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
344 浏览

recursion - Prolog 中的递归等

我在航空公司及其航班的序言中有这个知识库:

递归规则:

有了这个我可以问一个问题:伦敦和巴塞罗那之间是否有联系?

问题:connection(london,barcelona).

答案将是肯定的。但是有什么我可以做的规则/问题可以给我更多的细节吗?

例如:伦敦和巴塞罗那之间的联系是直接的还是间接的?

其他问题:我想知道什么时候是间接航班,中间是哪个城市?(例如,在上面的示例中,它将是“巴黎”。

谁能帮我弄清楚?

0 投票
2 回答
487 浏览

prolog - 从顶点到所有其他可达节点的所有简单路径

我对 Prolog 完全陌生,并且正在研究图表。我在网上发现了一个问题,要求我指定一个节点,然后列出从该节点可到达的所有简单路径。没有目标节点,只需尝试所有可能性并返回所有这些路径。

我将图表示为路径(X,Y),表示从 X 到 Y 的有向边。

我建立了这个简单的周期性知识库:

如果我查询 all_paths(a, P),那么 P 应该是(假设 ; 是垃圾邮件,直到所有选项用尽)。

作为初学者,我写了类似的东西:

好的,稍微改了一下,现在我回来了:

有人可以帮助弄清楚如何正确获取所有路径吗?

0 投票
1 回答
260 浏览

prolog - 在Prolog中确定节点是否在矩阵中连接

所以我得到的是一个包含矩阵坐标的列表。例如:

我需要弄清楚所有这些节点是否相互连接。也就是说,如果我选择任意一个节点,我可以到达任何其他节点。这适用于 ,List 1但不适用于List 2,因为我无法从前 4 个节点中的任何一个到达后 4 个节点中的任何一个。在List 1中,节点[2, 2]充当桥梁,因此它是正确的。

我设法编写了一个谓词,它将返回特定单元格的邻居,但我不确定如何继续。

编辑:所以这就是我现在所拥有的:

编辑 2:您只能向左/上/右/下移动 1 个单元格。矩阵中的每个单元格都有一个 X 和 Y 坐标。在列表 1 中,我可以从任意节点到达任意节点,因为总是有一个相邻节点。所以,到达我的意思是从节点 A 到节点 B 只增加 X 或 Y 1。

0 投票
1 回答
643 浏览

prolog - 定义事实的传递关系

我是 Prolog 的新手,并试图学习它。我想实现类似的东西a>bb>c然后a>c是传递关系。

我有一套以下规则。

我们知道大象比病毒大。我想要实现的是当我使用smaller(ant,elephant)它时应该返回true. smaller(X,Y)我尝试使用的规则是

0 投票
1 回答
87 浏览

prolog - 结果没有与给定的事实进行比较

使用 prolog 编写代码以获得一些比较的输出,但一些输出无法正常工作。似乎那些没有与事实进行比较。这里的代码

这是我想从这个程序中找到答案的问题

• 鹦鹉会飞吗?
• 鹦鹉的颜色是什么?
• 鹦鹉有皮肤吗?
• 鲨鱼危险吗?

0 投票
2 回答
167 浏览

recursion - 我如何计算递归规则的递归次数?

我处理一个问题;我想计算我的代码的递归规则做了多少次递归。

我的程序检查对象是否是计算机硬件的组件(通过组件(X,Y)谓词)。例如组件(计算机,主板)-> true。

它甚至检查对象不是直接组件而是另一个组件的子组件的情况。例如 subcomponent(computer,ram) -> true。(因为 ram 是主板的组件,主板是计算机的组件)

因为我的代码超过 400 行,所以我将只向您展示表单组件(X,Y)和规则子组件(X,Y)的一些谓词。

因此,一些谓词如下:

等等....

我的规则是:

好吧,为了计算给定组件 X 到给定组件 Y 所具有的组件数量——也就是递归规则 subcomponents(X,Y) 的递归数量,我做了一些失败的尝试。但是,我在下面介绍它们:

一世)

在这种情况下,我收到此错误:“错误:is/2:参数未充分实例化”。

ii)

在这种情况下,我得到的结果是 1 或 11,并且在这个数字之后是真的,仅此而已。完全没有逻辑!

iii)

在这种情况下,根据我的知识库,我得到的结果数字不正确。(或者我误译了它们——因为这种方式似乎有一些逻辑)

那么,我做错了什么,我应该写什么?

我期待着阅读你的答案!

0 投票
1 回答
305 浏览

prolog - Prolog - 祖谓词实现的 2 种方法

给定一组通过谓词parent/2表示父子关系的事实,用谓词pred1/2pred2/2定义关系“祖先”(祖先)时有什么区别,如下所示?

0 投票
1 回答
501 浏览

database - 数据库管理——关闭功能依赖

关系的这些函数依赖关系的闭包是什么?

  1. A -> 直流
  2. D -> B

回答:A -> BC(使用伪传递性规则)。

我是正确的还是我错过了什么?

0 投票
2 回答
2477 浏览

performance - Spark 示例程序运行很慢

我尝试使用 Spark 来解决简单的图形问题。我在 Spark 源文件夹中找到了一个示例程序:transitive_closure.py,它计算不超过 200 个边和顶点的图中的传递闭包。但在我自己的笔记本电脑上,它运行了 10 多分钟并且没有终止。我使用的命令行是:spark-submit transitive_closure.py。

我想知道为什么即使计算这么小的传递闭包结果,火花也会这么慢?这是一个常见的情况吗?有什么我想念的配置吗?

该程序如下所示,可以在他们网站的 spark install 文件夹中找到。

0 投票
0 回答
341 浏览

prolog - Prolog 传递闭包:迷宫探路者

我有兴趣实现一个简单的 Prolog 程序,该程序在迷宫结构上执行路径查找查询。

错误:当路径与输入节点 >= 5 步外一起使用时,我的 Prolog 解释器 (SWI) 会进入无限递归状态。但是,该规则适用于路径中少于 5 个节点的步骤。奇怪的是,省略对称规则(简单地声明每个邻接,向后和向前),将路径的调用限制减少到少于 3 个节点差异。再次覆盖默认堆栈分配会增加堆栈溢出之前的路径跨度。

显然,累加器是有序的。我怀疑我的程序在运行时崩溃,因为解释器继续重新访问已经在路径中遍历的节点。

我修改path为包含一个额外的要求legal,它作为一个累加器:

但是,我现在面临 varZ作为“单例”的问题。

关于如何正确实现累加器以避免过多的堆栈调用的任何建议?