问题标签 [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.
recursion - Prolog 中的递归等
我在航空公司及其航班的序言中有这个知识库:
递归规则:
有了这个我可以问一个问题:伦敦和巴塞罗那之间是否有联系?
问题:connection(london,barcelona).
答案将是肯定的。但是有什么我可以做的规则/问题可以给我更多的细节吗?
例如:伦敦和巴塞罗那之间的联系是直接的还是间接的?
其他问题:我想知道什么时候是间接航班,中间是哪个城市?(例如,在上面的示例中,它将是“巴黎”。
谁能帮我弄清楚?
prolog - 从顶点到所有其他可达节点的所有简单路径
我对 Prolog 完全陌生,并且正在研究图表。我在网上发现了一个问题,要求我指定一个节点,然后列出从该节点可到达的所有简单路径。没有目标节点,只需尝试所有可能性并返回所有这些路径。
我将图表示为路径(X,Y),表示从 X 到 Y 的有向边。
我建立了这个简单的周期性知识库:
如果我查询 all_paths(a, P),那么 P 应该是(假设 ; 是垃圾邮件,直到所有选项用尽)。
作为初学者,我写了类似的东西:
好的,稍微改了一下,现在我回来了:
有人可以帮助弄清楚如何正确获取所有路径吗?
prolog - 在Prolog中确定节点是否在矩阵中连接
所以我得到的是一个包含矩阵坐标的列表。例如:
我需要弄清楚所有这些节点是否相互连接。也就是说,如果我选择任意一个节点,我可以到达任何其他节点。这适用于 ,List 1
但不适用于List 2
,因为我无法从前 4 个节点中的任何一个到达后 4 个节点中的任何一个。在List 1
中,节点[2, 2]
充当桥梁,因此它是正确的。
我设法编写了一个谓词,它将返回特定单元格的邻居,但我不确定如何继续。
编辑:所以这就是我现在所拥有的:
编辑 2:您只能向左/上/右/下移动 1 个单元格。矩阵中的每个单元格都有一个 X 和 Y 坐标。在列表 1 中,我可以从任意节点到达任意节点,因为总是有一个相邻节点。所以,到达我的意思是从节点 A 到节点 B 只增加 X 或 Y 1。
prolog - 定义事实的传递关系
我是 Prolog 的新手,并试图学习它。我想实现类似的东西a>b
,b>c
然后a>c
是传递关系。
我有一套以下规则。
我们知道大象比病毒大。我想要实现的是当我使用smaller(ant,elephant)
它时应该返回true
. smaller(X,Y)
我尝试使用的规则是
prolog - 结果没有与给定的事实进行比较
使用 prolog 编写代码以获得一些比较的输出,但一些输出无法正常工作。似乎那些没有与事实进行比较。这里的代码
这是我想从这个程序中找到答案的问题
• 鹦鹉会飞吗?
• 鹦鹉的颜色是什么?
• 鹦鹉有皮肤吗?
• 鲨鱼危险吗?
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)
在这种情况下,根据我的知识库,我得到的结果数字不正确。(或者我误译了它们——因为这种方式似乎有一些逻辑)
那么,我做错了什么,我应该写什么?
我期待着阅读你的答案!
prolog - Prolog - 祖谓词实现的 2 种方法
给定一组通过谓词parent/2表示父子关系的事实,用谓词pred1/2和pred2/2定义关系“祖先”(祖先)时有什么区别,如下所示?
database - 数据库管理——关闭功能依赖
关系的这些函数依赖关系的闭包是什么?
- A -> 直流
- D -> B
回答:A -> BC(使用伪传递性规则)。
我是正确的还是我错过了什么?
performance - Spark 示例程序运行很慢
我尝试使用 Spark 来解决简单的图形问题。我在 Spark 源文件夹中找到了一个示例程序:transitive_closure.py,它计算不超过 200 个边和顶点的图中的传递闭包。但在我自己的笔记本电脑上,它运行了 10 多分钟并且没有终止。我使用的命令行是:spark-submit transitive_closure.py。
我想知道为什么即使计算这么小的传递闭包结果,火花也会这么慢?这是一个常见的情况吗?有什么我想念的配置吗?
该程序如下所示,可以在他们网站的 spark install 文件夹中找到。
prolog - Prolog 传递闭包:迷宫探路者
我有兴趣实现一个简单的 Prolog 程序,该程序在迷宫结构上执行路径查找查询。
错误:当路径与输入节点 >= 5 步外一起使用时,我的 Prolog 解释器 (SWI) 会进入无限递归状态。但是,该规则适用于路径中少于 5 个节点的步骤。奇怪的是,省略对称规则(简单地声明每个邻接,向后和向前),将路径的调用限制减少到少于 3 个节点差异。再次覆盖默认堆栈分配会增加堆栈溢出之前的路径跨度。
显然,累加器是有序的。我怀疑我的程序在运行时崩溃,因为解释器继续重新访问已经在路径中遍历的节点。
我修改path
为包含一个额外的要求legal
,它作为一个累加器:
但是,我现在面临 varZ
作为“单例”的问题。
关于如何正确实现累加器以避免过多的堆栈调用的任何建议?