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

prolog - 无缘无故的Prolog错误

我创建了以下脚本,但是,它给我一个错误,即使从我的角度来看它是完全正确的。可能是什么原因造成的?

当我使用以下命令运行它时:

它向我抛出以下错误:

0 投票
4 回答
260 浏览

prolog - Prolog分成两个列表问题

我有一个序言任务。

我需要查看列表中的第一个项目,看看它的后续项目是否相同,直到它们不同,然后将列表按第一个项目及其重复项分开。例如,如果我的列表是 a、a、a、b、c,它会将其分成第一个:a、a、a。第二:b,c。

我当前的解决方案有效,但最终匹配项进入第二个列表,而不是第一个。我似乎想不出一种方法让它出现在第一个列表中。

0 投票
1 回答
210 浏览

prolog - 如何跳过已经打印序言的元素

我试图在 Prolog 中做一个这样的练习:我介绍了这个列表[10,20, 10, 20, 30],程序显示:

这是我的代码:

但结果是这样的:

他向元素显示元素在列表中的次数。任何帮助,请!

0 投票
5 回答
2668 浏览

list - 在 Prolog 中搜索(相同)两个元素的列表

如何在 Prolog 中的列表中搜索多次出现的特定元素?

例如,如果我们在列表中搜索[1,2,3,4,1]元素1,Prolog 应该返回true,否则会返回false所有其他数字。

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

我的基本想法是搜索列表,直到找到我要查找的元素,然后再次在列表的尾部搜索该项目。我不想使用 Prolog 提供的 member() 函数。

如果查询询问,Prolog 还应该返回多次出现的元素:duplicate([1,2,3,4,1], X),应该打印X = 1

0 投票
5 回答
680 浏览

prolog - Prolog no_duplicate 函数

我正在尝试编写一个简单的程序来检查列表是否有任何重复项。这是我到目前为止所尝试的:

如果我尝试no_duplicates([1,2,3,3])。它说的是真的。为什么是这样?我可能在这里误解了 Prolog,但感谢您提供任何帮助。

0 投票
3 回答
233 浏览

list - 将列表过滤到单独的列表中

我需要过滤列表[#,d,e,#,f,g],以便获得输出, 每次遇到“#”时[[d,e],[f,g]],我都会在创建新列表时卡住,有没有办法做到这一点?
我尝试了下面的代码,

0 投票
3 回答
124 浏览

prolog - 列表操作的奇怪结果

我正在尝试在 Prolog 中实现一些用于列表操作的谓词。一切都按预期工作。例如

示例查询:

但是我在使用“删除”谓词时遇到了麻烦。以下是它的实现方式:

结果错误的示例查询:

我已经用进一步的输入对其进行了测试,它总是返回一个预期长度的列表,所以它以某种方式工作。但是为什么我只得到那些神秘的 _GXXXX 而不是数字呢?

提前谢谢了!

0 投票
8 回答
1157 浏览

sorting - 如何在 ISO Prolog 中定义(和命名)相应的安全术语比较谓词?

标准术语顺序(ISO/IEC 13211-1 7.2 术语顺序)定义在所有术语上——包括变量。虽然这有很好的用途——想想setof/3. 8.4 词条比较特点:

8.4 术语比较

8.4.1 (@=<)/2, (==)/2, (\==)/2, (@<)/2, (@>)/2, (@>=)/2。
8.4.2 比较/3
8.4.3 排序/2
8.4.4 键排序/2

举个例子,考虑:

这成功了,因为

7.2 期限顺序

排序term_precedes
(3.181) 定义 了 term是否在Xterm 之前Y

如果XY是相同的术语,那么X term_precedes Y
Y term_precedes X都是假的。

如果XY有不同的类型:Xterm_precedes Yiff 的
类型按以下顺序在类型之前:X先于先于先于 先于。Y
variablefloating pointinteger
atomcompound

注意——测试术语顺序的内置谓词
在 8.4 中定义。
...

因此所有变量都小于a。但是一旦X实例化:

结果无效。

所以这就是问题所在。为了克服这个问题,可以使用约束,或者只坚持核心行为,从而产生一个instantiation_error.

7.12.2 错误分类

错误按以下形式分类Error_term


a) 当参数或其组件之一是变量并且需要
实例化参数或组件时,应存在实例化错误。它有
形式instantiation_error

通过这种方式,只要不发生实例化错误,我们就可以确定结果是明确定义的。

对于(\==)/2,已经存在dif/2使用约束或iso_dif/2产生干净实例化错误的情况。

那么我的问题是:如何在ISO Prolog中定义(和命名)相应的安全术语比较谓词?理想情况下,没有任何明确的术语遍历。也许要澄清一下:上面iso_dif/2没有使用任何明确的术语遍历。两者(\==)/2和在内部遍历该术语,但是与使用or(\=)/2的显式遍历相比,这样做的开销非常低。(=..)/2functor/3, arg/3

0 投票
2 回答
271 浏览

prolog - 为什么我们使用“!” 在序言中

这是我试图理解的代码。

'!' 有什么用?和上面代码中的谓词 p(,,)。或者任何人都可以在上述代码的每一步中添加注释,以便我能够理解。谢谢。

0 投票
2 回答
801 浏览

prolog - Prolog 查询规则顺序

Prolog 问题:刚开始学习 Prolog,这是我们收到的练习测验之一。

鉴于:

列出以下查询返回的所有答案。

我的问题是关于第二个查询。为什么不返回 A=thor。? 我搞砸了一点,如果我将 train2 更改为

当我运行第二个查询时,我得到

在这里快速解释一下为什么查询中的规则顺序很重要。谢谢。