问题标签 [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 回答
300 浏览

prolog - 如何在不使用 Prolog 中的 findall 或 assert/retract 的情况下将元素添加到列表或从知识库中计算它们?

我有一个知识库,由文件'students.pl'中的学生数据库组成,如下所示:

我想从知识库中访问每个学生谓词并计算每个科目的平均分数或平均百分比,而不使用“findall”或断言/撤回。我可能想像这样使用回溯:

使用这种方法,我可以访问每个元素并编写它,但是如果我想将每个“百分比”值作为一个元素添加到列表中,或者只是使用像“百分比 1 是总计 + 百分比”这样的谓词来合计百分比值,然后找到它的平均值,我该怎么做?请注意,我不想使用 findall 或retract/assert 并且最好在一次通过知识库中找到平均值,因为知识库非常大。

任何帮助表示赞赏。

0 投票
1 回答
546 浏览

prolog - Prolog findall/3:不止一袋

我正在为 Fox and Geese 类型的游戏编写 AI。我的谓词之一如下所示:

它需要一个游戏状态并与狐狸一起移动。结果状态与 统一,NextState实际移动与 统一PegList。一切都按预期工作。

我正在计算所有动作的效用分数' NextState。为了能够找到具有最高效用得分的州,我findall/3在比较它们的效用得分之前使用列表中的所有州。

通过找到最大效用得分,我知道效用得分最高的NextState(以及它在列表中的位置)。只有一个问题,目前我还没有写任何谓词来推断采取了哪一步NextState,例如:

与其编写这样的谓词,我更愿意使用findall/3或等效。我的问题是是否有某种方法可以在两个不同的列表中获取两个不同的变量。我在想这样(如果可行的话):

我可以实现这样的功能而不必运行findall/3两次(难看的开销)或编写getMove(+PrevState, +NextState, -PegList)谓词吗?

0 投票
1 回答
2576 浏览

list - 从 Findall 生成的列表中删除重复项

我正在通过提出一个非常简单的关于谁发送和接收电子邮件的数据库来练习 Prolog。

findall我已经使用预先指定的接收器创建了一个列表X

0 投票
1 回答
1464 浏览

prolog - Prolog findall/3

假设我有一个谓词 pred 包含几个事实。

我可以使用 findall/3 来获取可以进行模式匹配的所有事实的列表吗?

例如,如果我有

pred(a, _, _) 我想获得

[pred(a, b, c), pred(a, d, f)]

0 投票
1 回答
1459 浏览

csv - Prolog,读取一个 csv 文件并做一个谓词。找到所有

我正在使用 SWI-Prolog。

我有一个 csv 文件,其中第一行是探针,然后每一行都是一个样本:

实际文件有超过 20,000 列('probes')和不超过 150 行('samples')。

我想提取每个关系并将它们作为事实打印在另一个文件中。

例如:

到目前为止我的代码:

这似乎运作良好,但不起作用,或者它太慢以至于无法与 findall 一起使用。

知道可能是什么问题吗?

感谢您的任何帮助。

更新

感谢你的回复。

我已经定义:

所以我有一个打开的文件而不是一个流,而 Functor 变量目前是多余的。

我对您如何使用 maplist 感到困惑?我不能让它工作。

我努力了:

也:

但两者都失败了。

0 投票
1 回答
512 浏览

prolog - Findall 与 Pacman netlogo 游戏列表

我是 prolog 的初学者,我正在尝试使用 netlogo 和 prolog 让 pacman 自行移动。所以这是我的代码的一部分:

walkfront(_,_,_,_,_,_,Pacman,DirP,Lab,Ghost,_,Pellet,_,_,Decision) :- findall(Dir, ( member(Dir,[0,90,180,270]), \+ ( member((G,false),Ghost), dangerous(Pacman,G,2,Dir,_) ) ), L), findall(Dir,(member(Dir,[0,90,180,270]),(member(P,Pellet))),T), chooseNotDangerous(L,Pacman,DirP,Lab,Dir,T)

walkfront(_,_,_,_,_,_,Pacman,DirP,Lab,Ghost,_,Pellet,_,_,Decision)这一行包含我从 netlogo 获得的所有信息列表,Pacman 有 pacman (x,y) 的位置,DirP 是 pacman 面对的方向,Lab 是迷宫中的空闲空间,Ghost 是ghosts (x,y,eaten?),Pellet 是所有小球 (x,y) 位置的列表,Decision 是 pacman 选择的输出。
第一个 findall 应该给我所有没有鬼和不危险的方向 (Dir),并将它们保存在一个名为 L
的列表中。第二个 findall,我希望它给我所有有的方向颗粒并将它们保存在一个名为 T 的列表中。
我的问题是这个 findall 是否正确,因为我的代码由于某种原因无法正常工作,我认为这可能是因为第二个 findall。
感谢你们对我的帮助 :)。

0 投票
1 回答
409 浏览

prolog - findall/3 返回一个空列表而不是解决方案

我使用 GNU Prolog 来解决问题。我定义了以下谓词:

Prolog 说这clue_two(17)是真的,但是当我尝试时 findall(S, clue_two(S), L),GNU Prolog 返回空列表。为什么?

0 投票
2 回答
911 浏览

variables - Correct use of findall/3, especially the last result argument

I'm a beginner in Prolog and I am dealing with a problem that might seem stupid to you, but I really can't understand what I'm doing wrong! Ok, I have this file fruits.pl and inside that I have something like this:

I have already (inside that file made a coexist(X,Y) atom that checks if two fruits can be put together in a plate. It works fine! But now I can't create a suggest(X) that takes as a parameter a fruit and returns a list of fruits that can be put together in the same plate. The thing is I was trying to make something like that

What do you think? Every time I try to run this in swi prolog there is a warning 'singleton variable' and when I press

then it says false.. sorry for my english :/

0 投票
1 回答
1132 浏览

prolog - 在 Prolog 中不使用 findall/3 查找查询的所有匹配项

我得到了一个数据库,我正在使用谓词查询数据库

我有我的数据库,

现在我不想使用标准findall/3谓词,而是想使用我自己的 findall,

如果我使用总是将我带到数据库开头的递归,我将不知道如何递归地使用 findmin 来给我在数据库中不同的事件。

0 投票
2 回答
739 浏览

prolog - 为什么 swi-prolog 中的 findall/3 忽略变量绑定?

以下代码给出了这些结果:

但是,当我希望所有元素都共享相同的未绑定变量(而不是 a)时,事情就不会像预期的那样工作:

为什么 _G1918、_G1912 和 _G1906 不相互绑定?这是 swi-prolog 中的错误吗?