问题标签 [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 投票
2 回答
486 浏览

recursion - Prolog 超出本地堆栈空间/无限递归

我在这个网站上阅读了其他类似的问题和答案,但似乎无法找到我的特定问题的答案。我正在尝试在 Prolog 中编码一个迷宫。从区域 0 可以自由移动到区域 1 或区域 3。从区域 3 可以自由移动到区域 0、区域 4 或区域 5 等。我想找到长度为 7 的所有路径从开始到结束(从 0 到 14)。我在 SWI-Prolog 中以下列方式对问题进行了编码:

当我执行时,path(14,0).我得到true. 但是,当我执行 path(0,14). 时,我用完了本地堆栈空间。我不知道怎么可能。谢谢你的帮助!

0 投票
1 回答
455 浏览

prolog - 为什么这会导致无限递归?

我在序言中有这个程序,我基本上定义了一个人的图表,我需要做一些谓词来告诉我哪些人是有联系的,哪些是派系。以下是事实:

这是我的谓词 clique 的定义。它将图 G 和人员列表作为参数,并尝试检查列表中的人是否确实是朋友圈。(这意味着谓词 goodfriends 对于列表中的每一对人都是正确的)

clique 所做的是:如果列表仅包含两个人,则只需检查这两个人是否是好朋友。如果这是真的,那么他们两个之间就有一个派系。如果人员列表中有两个以上的人,那么对于列表的每个头部,即人员检查他是否与列表尾部的其余人员是好朋友,并递归地对所有列表执行此操作人。下面定义了 clique 工作的其余辅助谓词。

问题

当我创建名为 runner 的谓词来测试谓词“clique”时:

我希望它返回图中的所有派系,但我的结果是:

递归有什么问题?我知道我得到了正确的结果,但出于某种原因,所有结果都显示它不断递归。

先感谢您。

0 投票
2 回答
133 浏览

parsing - Prolog 解析正在耗尽堆栈

我有这个代码

当我投射类似的东西np(X). vp(X).pp(X)得到一个可能的解析然后出现堆栈错误时。当我投射时,s(X).我什至没有得到解析。我知道这是因为有一些无限循环正在运行,但我无法指出它在哪一点被循环。我认为这可能会发生,因为我的所有变量都使用相同的名称,但后来我将它们更改为单独的,它没有改变任何东西。

有人有提示吗?

提前致谢!

0 投票
2 回答
360 浏览

sorting - Prolog - 我如何让尾巴不为空

我有以下问题:

定义一个谓词sorted(LL),当列表LL 包含按长度增加的顺序排序的其他列表时满足该谓词。例如:

到目前为止,我有这段代码:

问题包含在上面的行中:sorted([L2,T]). 当列表列表中只剩下一个元素时,该调用将附加一个空列表[],因此更短/2 将失败。它在以下 SWIPL 跟踪中进行了描述。

0 投票
1 回答
116 浏览

prolog - Prolog infinite loop issue

I have the below functions. When I call it with final_filter([(2, 2)], R), it prints a lot of "2 2" pairs. When I comment get_all_sums(S, _) it works fine, however if I test separately get_all_sums(4, R). I works also fine, what could be the problem?

0 投票
2 回答
790 浏览

prolog - 使用 Prolog 将单个列表按顺序拆分为三个

我正在尝试创建一个函数,将可变长度列表按顺序拆分为三个偶数长度列表。以下将其拆分为三个,但进程一次将它们插入每个列表中。

我想要的一个例子是:

另一个例子是:

以下代码通过一次插入每个列表来拆分它们:

此代码输出:

我该如何解决这个问题?

0 投票
2 回答
77 浏览

math - Prolog 中的范围乘积

我需要编写一个程序,计算范围内产品的乘积:在此处输入图像描述

我写了以下代码:

这应该实现从NtN的基本产品1/ln(j)。据我了解,当 Nt 和 N 相等时,它必须停止。但是,由于以下原因,我无法使其正常工作:

以下错误。有没有其他方法可以不使用 SWI-Prolog 的默认库来实现循环?

0 投票
4 回答
373 浏览

prolog - s(X)-sum 的更好终止

(让我在期中问题的浪潮中偷偷摸摸。)

两个自然数之和的常见定义是nat_nat_sum/3

严格来说,这个定义太笼统了,因为我们现在也成功了

同样,我们得到以下答案替换:

我们将此答案替换解释为包括所有自然数,而不关心其他术语

鉴于此,现在让我们考虑它的终止属性。事实上,考虑以下故障切片就足够了。也就是说nat_nat_sum/3,如果这个切片没有终止,不仅不会终止。这一次他们完全一样!所以我们可以说iff。

这个失败切片现在暴露了第一个和第三个参数之间的对称性:它们都以完全相同的方式影响非终止!因此,尽管它们描述了完全不同的事物——一个是总和,另一个是总和——但它们对终止的影响完全相同。可怜的第二个论点没有任何影响。

可以肯定的是,不仅故障片在其通用终止条件(使用 cTI)中相同,其读取

对于此条件未涵盖的情况,它也以完全相同的方式终止,例如

现在我的问题:

nat_nat_sum/3是否存在具有终止条件的替代定义:

(如果是,请出示。如果不是,请说明原因)

换句话说,如果新定义的一个论点已经是有限且有基础的,则新定义nat_nat_sum2/3应该终止。


精美的印刷品。只考虑纯粹的、单调的 Prolog 程序。也就是说,除了(=)/2和之外没有内置插件dif/2

(我将为此奖励 200 赏金)

0 投票
3 回答
729 浏览

prolog - 使用 Prolog 从数字倒数

微不足道的问题,但我希望程序返回小于或等于给定数字的数字列表。例如,CountD(4,L)。应该给[4,3,2,1]。这是我到目前为止所拥有的:

0 投票
3 回答
3320 浏览

prolog - Prolog:检查 X 是否在 0 到 K - 1 的范围内

我是 prolog 的新手,我写的每一段代码都会变成一个无限循环。

我特别想看看 X 是否在 0 到 K - 1 的范围内。

我在代码背后的想法是我递减 K 直到 K0 等于 X,然后基本情况将开始。虽然我得到了一个无限循环,所以我的想法是错误的。