问题标签 [failure-slice]
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.
prolog - Prolog 中的递归如何从内部工作。一个例子
我这里有一个小脚本,它将元素列表转换为集合。例如列表 [1,1,2,3] -> 设置 [1,2,3]。有人可以逐步向我解释这些程序中发生了什么吗?你能用我的 [1,1,2,3] -> [1,2,3] 例子吗?
prolog - prolog中递归的计算复杂度
我有一个递归:
它将元素列表转换为集合。例如 [1,1,2,3] -> [1,2,3]。当我输入查询list_to_set([1,1,2,3],X).
时,结果是X = (1,2,3)
,找出集合的复杂性是O(n)
. 现在我可以输入;
替代以确保没有其他可能的答案。显然没有,脚本会返回false
。我的问题是:第二个脚本运行的计算复杂度是多少,为什么?
prolog - Prolog无限循环
这是一个应该找出谁与 john 兼容的程序。我是 Prolog 的新手。为了让Prolog知道例如。met(X,Y) = met (Y,X) 已经写了很多代码。现在当我开始查询时
它进入无限循环......
源代码:
我一直在研究这么多,但我仍然不明白问题是什么以及如何解决它。能帮助我对我来说太好了。
prolog - Prolog递归过程的解释
如果可能的话,我希望有人解释这个过程(来自“现在学习序言”一书)。它需要两个数字并将它们相加。
原则上我理解,但我有一些问题。假设我发出查询
结果是:
第 1 步是与规则 2 的匹配。现在 X 变为 s(0),Y 仍然是 s(0)。但是 Z(根据本书)变为 s(_G648),或 s(),其中包含未实例化的变量。为什么是这样?
在最后一步,匹配第一条规则,结束递归。在这里,Y 的内容以某种方式最终出现在 Z 的未实例化部分中!非常混乱,我需要一个简单的英文解释。
prolog - 英语无约束语法序言
我在尝试在 prolog 中实现一个非常简单的无约束语法时遇到了一个无限递归问题。
这是我的规则:(vp -> 动词短语,np -> 名词短语,ap -> adj 短语,pp -> prep 短语)
我遇到的问题是ap的规则可以产生任意长的形容词字符串,所以在某些时候,我会通过尝试所有这些无限的可能性来满足查询。
例如,下面的查询永远不会产生 S = [put, the, red, block, on, the, green, block] 因为它会首先将左侧“red”的形容词短语扩展为无限可能,然后再尝试使用正确的。
prolog - 好的 Prolog 代码的特点?
编写好的 Prolog 必须掌握哪些设计启发式方法?我听说一个有经验的程序员需要大约两年的时间才能精通 Prolog。有效地使用递归是其中的一部分,但这似乎是一个相对较小的障碍。到底是什么给程序员带来了这么多麻烦?我应该在示例代码中寻找什么来判断它的质量?
prolog - 如何找到对目标没有贡献的事实
我正在尝试编写一个程序来检查学生程序是否可以实现某个目标。我可以做那部分。现在,我想检查学生程序是否实际上包含不必要的代码。为了解决这个问题,我想我需要知道学生程序是否包含对指定目标没有贡献的事实。但是,我无法弄清楚如何找到对目标没有贡献的事实。
为了更容易理解,让我们考虑一个更简单的例子。在这个例子中,指定的目标是:john 是 tomy 的祖父吗?
实际上,只有以下事实才能满足目标:
我想知道的是哪些事实实际上对目标没有贡献。答案将是以下所有事实:
非常感谢任何帮助。谢谢
prolog - 这个序言排序程序是否仅仅因为它的复杂性而溢出堆栈 - 还是因为它是错误的?
在上一篇文章中,我最终想出了如何编写 gprolog 程序来检查一个列表是否是另一个列表的排列。据我所知,它有效。
现在,我正在创建一个mysort
谓词,它将排列谓词与这个组合谓词(据我所知,也可以工作):
由于我的原始perm
谓词设计为!
在得到答案后立即终止,因此我进行了一些修改以允许mysort
检查可能性。这是mysort
,它的特殊backtrack_perm
,以及与旧的重叠perm
(我只是将其修改为对 的轻微更改backtrack_perm
):
尽管它的组件看起来可以正常工作,但mysort
在某些输入上会导致堆栈溢出,例如mysort([5,3,2],X)
. 在已经排序的列表中,例如mysort([2,3,5],X)
,甚至是部分列表中,mysort([3,2,5],X)
跟踪可能很长,但它确实得到了答案。正因为如此——而且由于一个较小的完全向后的列表[2,1]
可以正常工作——我认为问题在于该过程本身对于所有这些排列来说太耗费空间/时间。
如果不深入研究更长的痕迹,是否可以安全地假设是这种情况?或者 Prolog/计算机应该能够毫无困难地处理这个问题,这意味着我需要重新考虑算法?
prolog - 无限的成功树,或者不是?
我得到了以下程序:
并询问是否将证明树算法应用于以下查询:
证明树是无限成功树,还是无限失败树?
现在我看到了,在树的构建过程中,你会一遍又一遍地应用路径规则 1,创建一棵无限的树,而永远不会达到路径规则 2。
从而创建一个无限的故障树。但是我的解决方案说这是一棵无限的成功树,我的问题是:我是对的还是我的教授是对的?:]
prolog - 当我调用 `even(3)` 时会发生什么,而 `even` 是一个生成器函数?
我在序言中有以下奇数和偶数生成器
我想了解为什么我不能将这些函数用作测试人员,即?even(3).
这会导致无限循环。
这不是我打电话时发生的事情?even(3).
吗?
X
被实例化为3
. 尝试找到任何奇怪Y
的(从 开始0
)。发现Y=1
。现在是我不明白的部分。我不知道当它必须处理该子句时会发生什么X is Y+1
。考虑X
已经给出了,这里发生了什么?