问题标签 [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.
prolog - 如何使用 Prolog 在二分图中找到所有完美匹配?
我试图在二分图中找到所有完美匹配,然后对每个解决方案进行一些非平凡的评估(非平凡的手段,我不能使用匈牙利算法)。我为此使用Prolog,是否有任何非指数解决方案?(如果结果当然不是指数级的......)
prolog - 将列表从最短到最长排序
我最近拿起了序言,并正在尝试制作一个程序来为著名的拼图骑士之旅找到解决方案 [在此处找到]
使用Warnsdorff算法,我试图找到可以从棋盘上的特定位置进行的所有可能的移动,然后进行移动后可能移动最少的移动,然后重复该过程,但是我有找不到所说的动作。
到目前为止,这是我的代码
由于仅在找到所有可能移动的数量后才计算它们,因此我的列表未按我需要的方式排序。
例如这个输入
结果应该是
但是我得到
如果有人可以帮助我获得最低分数NewX
,NewY
那就太好了
prolog - 在 Prolog 中具有多个变量的 Findall
我想从我在 Prolog 中制定的规则中获取解决方案列表。
然而 findall 谓词似乎只适用于一个变量。
谁能建议如何解决这个明显的限制?
我的规则
我想要的是
我现在得到的
或者
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) ?
loops - 这个错误是什么意思?例外:(13) setup_call_catcher_cleanup
这个错误是什么意思?我该如何解决?(当然是理论上的。)这个程序放在这里太复杂了。
我的程序上的跟踪返回给我这个:
它会一次又一次地在相同的点上来回走动
prolog - findall/3 错误地评估为 false
我正在创建一个应该允许通过图形搜索的程序,但是当对 findall/3 的调用评估为 false 时,应该返回后继节点列表的函数失败。当我在 find_successors 函数之外单独尝试 findall 函数时,它运行良好,但由于某种原因在 find_successors 函数内部,它只是读取为 false。逐步使用图形调试器,我什至可以看到它找到了所有解决方案。这是代码:
prolog - JESS功能类似于Prolog中的findall?
我想知道是否可以编写一个 jess 函数或规则来findall
在 Prolog 中运行。
例如,我们有一个类似的 KB
输入是(school nyu)
,我们想收集所有喜欢的人的名字[jason,john]
任何意见将不胜感激!
matrix - 在 Prolog 中将事实提取为矩阵
假设我们有以下内容:
我想提取M
这些事实的矩阵表示 ( ),这样
这是一个简单的解决方案:
但是,这种方法存在一些问题,即:
- 我们遍历数据库n次,其中n是参数的数量;和
- 这不能很好地推广到任意n。
所以问题是:在 Prolog 中实现这一目标的最惯用的方法是什么?
haskell - 将 Haskell 翻译为 Prolog - 查找 sum 的子列表
我正在尝试翻译以下 Haskell 代码:
...进入序言。该代码应该给我一个总和等于目标数字的所有列表的列表。例如,
[[1,2,3]]
如果它绑定应该给你,因为1+2+3=6.
这是我到目前为止所拥有的:
但是,当我调用 sublistSums 函数时,它给了我这个:
我也试过:
仍然给我同样的结果。不完全确定我在这里做错了什么。
prolog - findall/3 在其结果列表中创建新的、不相关的变量
说得通。我可以处理 的排列,[A,B,C]
并且该排列包含与 中相同的元素[A,B,C]
,因此我对这些元素所做的一切都将适用于我的原始列表。
现在:
为什么??为什么findall/3
给我包含完全不相关变量的列表,而不是A,B,C
?中的列表Z
甚至没有相互关联,所以我得到的结果实际上只是 6 个长度为 3 的随机列表,这完全不是我查询的。
通过这种行为,我们会得到如下荒谬的结果:
从逻辑的角度来看,这没有任何意义。
我知道这findall/3
不是一个真正的关系,纯逻辑谓词,但我不明白这如何证明这里显示的行为是合理的。
因此,我的问题是:
为什么为谓词选择这种行为?
是否存在这种行为实际上比我想要的行为更可取的常见情况?
如何实现具有
findall/3
我想要的行为的版本?