问题标签 [prolog-dif]

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

prolog - 实现一个 Prolog 谓词来判断一个元素是否属于一个列表。非数字列表的问题

我正在为大学考试学习 Prolog,但我在这个练习中遇到了问题:

not_member(X,L)如果元素X不属于列表,则实现为 TRUE 的谓词L

如果我的推理是正确的,我已经找到了解决方案:

此代码适用于数字列表,如以下查询所示:

但是,对于包含一些非数字元素的列表,它不起作用并报告错误:

为什么?

0 投票
2 回答
205 浏览

list - 仅删除唯一元素

有很多关于如何删除重复和类似问题的资源,但我似乎无法找到任何关于删除独特元素的资源。我正在使用 SWI-Prolog,但我不想使用内置插件来实现这一点。

也就是说,调用remove_unique([1, 2, 2, 3, 4, 5, 7, 6, 7], X).应该很高兴导致X = [2, 2, 7, 7].

显而易见的解决方案是

应该很快就会明白为什么这不是一个理想的解决方案:countis O(n)and so is is_uniqueas it just uses count. fail当我们找到多个元素但最坏的情况仍然是 时,我可以通过 ing 来改进这一点O(n)

那么我们来remove_unique。对于每个元素,我们检查当前元素是否is_uniqueO. 如果测试失败,该元素将被添加到下一个分支的结果列表中。运行中O(n²),我们得到了很多推论。虽然我认为我们不能在最坏的情况下加快速度,但我们能比这种幼稚的解决方案做得更好吗?我可以清楚地看到的唯一改进是count一旦识别出 >1 个元素就更改为失败的东西。

0 投票
1 回答
2671 浏览

prolog - X\=Y 和 dif(X,Y) 的区别

这有什么区别:

和这段代码:

我认为他们应该表现得一样,但他们没有。这是示例:

这里有一些电话:

X 应该是在列表 L 中恰好出现 N 次的原子。如果我用 替换dif(G, X)G \= X我不会得到预期的结果。有人能告诉我这两个运营商有什么区别吗?我可以使用除 以外的任何东西dif(G, X)吗?

此示例在 SWI-Prolog 中完美运行,但在 Amzi 中不起作用!序言。

0 投票
2 回答
294 浏览

prolog - 如何创建将每个值作为唯一值返回的规则

我正在跟随Learn Prolog Now!并且正在查看练习 2.4

在这里找到的解决方案似乎可以解决,但并不完全:

这会产生以下结果:

其中,只有 2 个是实用的:

由于其他 3 个解决方案包含重复项,因此它们不是该问题的可行答案。

如何添加到填字游戏规则以使其仅返回 V1、V2、V3、H1、H2、H3 都是唯一的结果?

0 投票
1 回答
600 浏览

prolog - PROLOG - 子句对常量返回 true,但找不到变量的解决方案?

在对 PROLOG 编程语言禁欲多年之后,我正试图再次涉足它。很快,有些事情让我感到困惑。

(我在 Windows 上使用 SWI prolog 6.4.1。)

考虑以下定义:

现在,如果我“询问”解释器: 兄弟(克拉拉,苏菲)。

答案是真的

但是,如果我尝试获取例如 clara 的兄弟姐妹: 兄弟(clara,X)。

答案是错误的。就像 findall( X, 兄弟 (clara, X ), L )。

返回一个空列表。

为什么?

0 投票
4 回答
1857 浏览

prolog - 为什么 SWI-Prolog 只提供一种解决方案?

老实说,我是 Prolog 新手,所以请原谅我的无知。

我有一个简单的谓词来计算列表中原子的出现次数,如下所示:

以下查询返回正确的结果:

但是,如果我试图找到所有可能的解决方案,它只会给出一个。

我如何得到它来提供所有的解决方案?我虽然它可能与 cut 运算符有关,但删除它似乎也不起作用。

0 投票
2 回答
5384 浏览

prolog - Prolog:不等式运算符

我正在使用 SICStus Prolog 并且有一组事实:

我想获得两个学生不同的两个学生的共同主题,所以我得到了:

但是,当我输入:

我明白了F = 'John Henry'。有人可以指出我哪里出错了,我需要做什么?谢谢。

0 投票
2 回答
1839 浏览

prolog - Prolog:一个人是他自己的兄弟姐妹?

我无法理解为什么我在 prolog 中的代码会根据我放入规则的顺序来执行某些操作。

这是我的数据库:

以下是规则:

问题是当我这样做时,

我明白了

但是当我改变顺序时(我把差异(X,Y)放在最后一部分)

我打电话给

我明白了

这就是我想要的。

到目前为止,我只看到在进行递归时规则的顺序很重要。所以我不明白鲍勃为什么仍然是他自己的兄弟,只是因为我把差异检查放在了第一位。

谢谢你的帮助!

0 投票
4 回答
492 浏览

list - 使用 prolog 再添加两次

我有一个列表[a, b, a, a, a, c, c] ,我需要在每个元素中再添加两次。

最终结果应如下所示:

如果我在列表中有一个与下一个项目相同的项目,那么它会一直运行直到有一个新项目,当它找到新项目时,它会添加上一个项目的两次出现然后继续。

到目前为止,这是我的代码,但我不知道如何添加两个......

0 投票
3 回答
226 浏览

prolog - 在序言中将列表划分到一个点

假设这是序言中的一个列表,我想将其分成三个部分,最多三个句号并将它们存储在变量中。

我怎样才能做到这一点...

我已经计算了列表(my_list)中句号的数量现在我想将列表划分为第一个句号并将其存储在一个变量中,然后划分为第二个句号并存储在一个变量中等等.. …………