问题标签 [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.

0 投票
4 回答
771 浏览

prolog - Prolog 中的递归如何从内部工作。一个例子

我这里有一个小脚本,它将元素列表转换为集合。例如列表 [1,1,2,3] -> 设置 [1,2,3]。有人可以逐步向我解释这些程序中发生了什么吗?你能用我的 [1,1,2,3] -> [1,2,3] 例子吗?

0 投票
1 回答
302 浏览

prolog - prolog中递归的计算复杂度

我有一个递归:

它将元素列表转换为集合。例如 [1,1,2,3] -> [1,2,3]。当我输入查询list_to_set([1,1,2,3],X).时,结果是X = (1,2,3),找出集合的复杂性是O(n). 现在我可以输入;替代以确保没有其他可能的答案。显然没有,脚本会返回false。我的问题是:第二个脚本运行的计算复杂度是多少,为什么?

0 投票
3 回答
4037 浏览

prolog - Prolog无限循环

这是一个应该找出谁与 john 兼容的程序。我是 Prolog 的新手。为了让Prolog知道例如。met(X,Y) = met (Y,X) 已经写了很多代码。现在当我开始查询时

它进入无限循环......

源代码:

我一直在研究这么多,但我仍然不明白问题是什么以及如何解决它。能帮助我对我来说太好了。

0 投票
3 回答
739 浏览

prolog - Prolog递归过程的解释

如果可能的话,我希望有人解释这个过程(来自“现在学习序言”一书)。它需要两个数字并将它们相加。

原则上我理解,但我有一些问题。假设我发出查询

结果是:

第 1 步是与规则 2 的匹配。现在 X 变为 s(0),Y 仍然是 s(0)。但是 Z(根据本书)变为 s(_G648),或 s(),其中包含未实例化的变量。为什么是这样?

在最后一步,匹配第一条规则,结束递归。在这里,Y 的内容以某种方式最终出现在 Z 的未实例化部分中!非常混乱,我需要一个简单的英文解释。

0 投票
3 回答
432 浏览

prolog - 英语无约束语法序言

我在尝试在 prolog 中实现一个非常简单的无约束语法时遇到了一个无限递归问题。

这是我的规则:(vp -> 动词短语,np -> 名词短语,ap -> adj 短语,pp -> prep 短语)

我遇到的问题是ap的规则可以产生任意长的形容词字符串,所以在某些时候,我会通过尝试所有这些无限的可能性来满足查询。

例如,下面的查询永远不会产生 S = [put, the, red, block, on, the, green, block] 因为它会首先将左侧“red”的形容词短语扩展为无限可能,然后再尝试使用正确的。

0 投票
1 回答
1069 浏览

prolog - 好的 Prolog 代码的特点?

编写好的 Prolog 必须掌握哪些设计启发式方法?我听说一个有经验的程序员需要大约两年的时间才能精通 Prolog。有效地使用递归是其中的一部分,但这似乎是一个相对较小的障碍。到底是什么给程序员带来了这么多麻烦?我应该在示例代码中寻找什么来判断它的质量?

0 投票
3 回答
147 浏览

prolog - 如何找到对目标没有贡献的事实

我正在尝试编写一个程序来检查学生程序是否可以实现某个目标。我可以做那部分。现在,我想检查学生程序是否实际上包含不必要的代码。为了解决这个问题,我想我需要知道学生程序是否包含对指定目标没有贡献的事实。但是,我无法弄清楚如何找到对目标没有贡献的事实。

为了更容易理解,让我们考虑一个更简单的例子。在这个例子中,指定的目标是:john 是 tomy 的祖父吗?

实际上,只有以下事实才能满足目标:

我想知道的是哪些事实实际上对目标没有贡献。答案将是以下所有事实:

非常感谢任何帮助。谢谢

0 投票
1 回答
224 浏览

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/计算机应该能够毫无困难地处理这个问题,这意味着我需要重新考虑算法?

0 投票
2 回答
606 浏览

prolog - 无限的成功树,或者不是?

我得到了以下程序:

并询问是否将证明树算法应用于以下查询:

证明树是无限成功树,还是无限失败树?

现在我看到了,在树的构建过程中,你会一遍又一遍地应用路径规则 1,创建一棵无限的树,而永远不会达到路径规则 2。

从而创建一个无限的故障树。但是我的解决方案说这是一棵无限的成功树,我的问题是:我是对的还是我的教授是对的?:]

0 投票
4 回答
717 浏览

prolog - 当我调用 `even(3)` 时会发生什么,而 `even` 是一个生成器函数?

我在序言中有以下奇数和偶数生成器

我想了解为什么我不能将这些函数用作测试人员,即?even(3).这会导致无限循环。

这不是我打电话时发生的事情?even(3).吗?

X被实例化为3. 尝试找到任何奇怪Y的(从 开始0)。发现Y=1。现在是我不明白的部分。我不知道当它必须处理该子句时会发生什么X is Y+1。考虑X已经给出了,这里发生了什么?