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

prolog - 如何使用 Prolog 在二分图中找到所有完美匹配?

我试图在二分图中找到所有完美匹配,然后对每个解决方案进行一些非平凡的评估(非平凡的手段,我不能使用匈牙利算法)。我为此使用Prolog,是否有任何非指数解决方案?(如果结果当然不是指数级的......)

0 投票
1 回答
220 浏览

prolog - 将列表从最短到最长排序

我最近拿起了序言,并正在尝试制作一个程序来为著名的拼图骑士之旅找到解决方案 [在此处找到]

使用Warnsdorff算法,我试图找到可以从棋盘上的特定位置进行的所有可能的移动,然后进行移动后可能移动最少的移动,然后重复该过程,但是我有找不到所说的动作。

到目前为止,这是我的代码

由于仅在找到所有可能移动的数量后才计算它们,因此我的列表未按我需要的方式排序。

例如这个输入

结果应该是

但是我得到

如果有人可以帮助我获得最低分数NewXNewY那就太好了

0 投票
1 回答
2714 浏览

prolog - 在 Prolog 中具有多个变量的 Findall

我想从我在 Prolog 中制定的规则中获取解决方案列表。

然而 findall 谓词似乎只适用于一个变量。

谁能建议如何解决这个明显的限制?

我的规则

我想要的是

我现在得到的

或者

0 投票
0 回答
361 浏览

prolog - Prolog findall 无限循环

我有一个断言事物的谓词。当我使用 findall 时,它会进入无限循环。

当我使用findall(A,veiculos_troncos(A),NTr)时,在使用上述谓词断言许多点(坐标)之后。

这就是我得到的(使用 findall):

等等……它继续转来转去,直到它再次给出

等等等等...

我不明白为什么。

我的“断言”谓词工作正常(我认为),问题是当我使用findall. 它一遍又一遍地通过相同的解决方案。

例子:

我得到的是上面的。

直到我得到这个错误:

这是完整的程序(源文件):

NL 是 L + 1。

NL 是 L - 1。

NC 是 C + 1。

NC 是 C - 1。

(源文件结束)

这样做:

虽然得到以下错误:

^ 例外:(10) findall(_G16022412, user:member([_G16022412|_G16022413], [[ (-8, 3, 19, [...|...], 1), (-8, 2, 18 , ..., ...)], [ (-8, 3, 19, ..., ...), (-8, 2, ..., ...)], [ (-8, 3, ..., ...), (-8, ..., ...)], [ (-8, ..., ...), (..., ...)], [ (..., ...)|...], [...|...]|...]), _G16022446) ?

0 投票
0 回答
133 浏览

loops - 这个错误是什么意思?例外:(13) setup_call_catcher_cleanup

这个错误是什么意思?我该如何解决?(当然是理论上的。)这个程序放在这里太复杂了。

我的程序上的跟踪返回给我这个:

它会一次又一次地在相同的点上来回走动

0 投票
2 回答
215 浏览

prolog - findall/3 错误地评估为 false

我正在创建一个应该允许通过图形搜索的程序,但是当对 findall/3 的调用评估为 false 时,应该返回后继节点列表的函数失败。当我在 find_successors 函数之外单独尝试 findall 函数时,它运行良好,但由于某种原因在 find_successors 函数内部,它只是读取为 false。逐步使用图形调试器,我什至可以看到它找到了所有解决方案。这是代码:

0 投票
1 回答
77 浏览

prolog - JESS功能类似于Prolog中的findall?

我想知道是否可以编写一个 jess 函数或规则来findall在 Prolog 中运行。

例如,我们有一个类似的 KB

输入是(school nyu),我们想收集所有喜欢的人的名字[jason,john]

任何意见将不胜感激!

0 投票
2 回答
99 浏览

matrix - 在 Prolog 中将事实提取为矩阵

假设我们有以下内容:

我想提取M这些事实的矩阵表示 ( ),这样

这是一个简单的解决方案:

但是,这种方法存在一些问题,

  1. 我们遍历数据库n次,其中n是参数的数量;和
  2. 这不能很好地推广到任意n

所以问题是:在 Prolog 中实现这一目标的最惯用的方法是什么?

0 投票
1 回答
495 浏览

haskell - 将 Haskell 翻译为 Prolog - 查找 sum 的子列表

我正在尝试翻译以下 Haskell 代码:

...进入序言。该代码应该给我一个总和等于目标数字的所有列表的列表。例如,

[[1,2,3]]如果它绑定应该给你,因为1+2+3=6.

这是我到目前为止所拥有的:

但是,当我调用 sublistSums 函数时,它给了我这个:

我也试过:

仍然给我同样的结果。不完全确定我在这里做错了什么。

0 投票
3 回答
397 浏览

prolog - findall/3 在其结果列表中创建新的、不相关的变量

说得通。我可以处理 的排列,[A,B,C]并且该排列包含与 中相同的元素[A,B,C],因此我对这些元素所做的一切都将适用于我的原始列表。

现在:

为什么??为什么findall/3给我包含完全不相关变量的列表,而不是A,B,C?中的列表Z甚至没有相互关联,所以我得到的结果实际上只是 6 个长度为 3 的随机列表,这完全不是我查询的。

通过这种行为,我们会得到如下荒谬的结果:

从逻辑的角度来看,这没有任何意义。

我知道这findall/3不是一个真正的关系,纯逻辑谓词,但我不明白这如何证明这里显示的行为是合理的。

因此,我的问题是:

  • 为什么为谓词选择这种行为?

  • 是否存在这种行为实际上比我想要的行为更可取的常见情况?

  • 如何实现具有findall/3我想要的行为的版本?