问题标签 [prolog-findall]

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 回答
481 浏览

list - 在 Prolog 的列表中合并元组的元素

我需要从可能如下所示的知识库中创建一个列表:

该列表需要包含元组,每个元组都包含 fact2 的第二个和第三个值,以及 fact2 的添加数,只要 fact1 和 fact2 的第一个值匹配。

当我展示我到目前为止所拥有的东西时,也许它会变得更清楚。这是我使用 findall 语句的谓词,对我来说,这似乎让我最接近我需要得到的地方:

我从中收到的列表如下所示:

但实际上我需要列表看起来像这样:

这意味着,每当元组的前两个元素匹配时,作为元组的第三个元素的数字应该加在一起。

但是,我什至不知道如何处理这样的事情,正如我一直读到的那样,一旦设置了列表,就无法更改它,因为 prolog 是功能性的和声明性的。

所以我认为我需要以某种方式将每个元素与它之前或之后的元素进行匹配(因为列表将始终由 Out1 和 Out2 变量排序),如果它们匹配,则将元组中的第三个值加在一起。问题是,我不知道怎么做。

对我来说,这似乎无法在 findall 本身内完成,但需要在 findall 之后完成。我是一个真正的初学者,希望能提供任何帮助。在这种情况下,如果解决方案都在一个谓词中,那将是最好的。

0 投票
1 回答
48 浏览

prolog - Prolog 多个统一到一个变量

我需要将数据库中的所有术语统一为一个变量。

对于给定的代码:

我得到输出:

我需要得到类似的东西:

是否可以?我知道retract/1,它从数据库中删除了术语,我可以遍历所有这些事实并将它们从数据库中一个一个地收回,但这似乎是在腿上开枪。任何给定的建议都值得赞赏。

0 投票
1 回答
117 浏览

prolog - findall 的 Prolog 问题如何构造一个列表的解决方案,它是一对(元素,list_of_elements)

我正在尝试解决一个问题,但我不知道如何正确管理谓词 findall。

这个想法是下一个。

我们有一张桌子和一些在桌子上堆叠排列的积木。

这可能是给定情况的示例:Table->a,b,c,d

所以块 a 正好在桌子上,块 b 在块 a 上,依此类推。

我们也有一些谓词,例如下一个:

因此,谓词stacking(X,Y)表示块“X”在块 Y 上堆叠,不一定完全在它之上,但 X 处于“上级”。例如,在stack table->abcd 中,d 是堆叠在b 之上。

其他谓词是over(X,Y)谓词表示块 X 正好在块 Y 上,例如,table->abcd,块 c 在块 b 上。

问题在于编写一个新谓词solution(L)L 是一个列表,其中包含对 [B,LB] 的所有列表,其中 B 是堆栈的一个块,其下至少有 2 个块,不包括正好在表上方的块(在示例 table->abcd 中,a 正好在桌子上方,b、c、d 不在)。LB 是一个列表,其中包含堆栈中 B 下的块。如果没有满足条件的块,则 L 应返回空。

为了解决这个问题,我们可以使用这个知识作为例子:

我解决问题的想法是下一个代码:

我发现的问题是我不知道如何在列表 LB 中插入 X 和 Y。

以table->abcd为例

解决方案应该是L=[[d,[c,b]]]

0 投票
1 回答
30 浏览

prolog - 在 findall 中过滤

我有规则:

其中分数定义为:

我只想找到 H 不在 Enemies 或 Team 中的 (H,E)。我后来尝试过,exclude但结果是元组,使它工作有点复杂。有没有办法在方法中过滤掉它findall?我该如何处理?

0 投票
1 回答
105 浏览

prolog - 在序言中查找所有内容

我有一些员工:

我想打印所有这些。我现在这样做:

它可以工作,但看起来不太好,我的意思是,'_' 太多了,我必须写 'Id, PosId, FN, LN, Birth' 字符串。如何在 findall() 中直接找到员工?

0 投票
0 回答
77 浏览

prolog - 从事实总结数据

(给定一个电影列表,编写一个 PROLOG 规则来添加和显示总收入。)这是我的问题,我基本上是在尝试添加一个整数值,从下面的列表中给出一个电影列表。我是 Prolog 的新手,我不太了解事情是如何工作的。

到目前为止,我写的规则只适用于一部电影。例子:

写的规则:


要求递归答案的相关问题。

0 投票
2 回答
229 浏览

prolog - Prolog findall/3 规则转换为递归规则

我想使用递归转换此规则,但我不确定如何。帮助!链接到回答这个问题的上一个问题:根据事实总结数据

0 投票
1 回答
40 浏览

prolog - 如何正确制定 findall/3 的异常?

我已经开始学习 Prolog,我想用 findall/3 获取玩家的对手列表。在概括中,我只想将实际上是玩家的对手添加到列表中,除了我自己要求的玩家。我该如何制定这个例外?我知道否定是失败的概念,但我不确定我是否以及如何在这里需要它。

我实际上预计,该决议将按如下方式工作:

我错过了什么?提前谢谢了!

0 投票
1 回答
571 浏览

prolog - 如何在 Prolog 代码本身中编写“findall”?

所以,我对 Prolog 很陌生,我必须写一个关于时间表的简短代码。如何将 findall 函数添加到代码本身?

现在我想写一个命令来显示我一周内有多少次化学反应。

0 投票
2 回答
163 浏览

prolog - findall 的异常行为

以下看起来很不寻常:

痕迹更是如此

从语义的角度思考findall这个意义不大。到底是怎么回事?