问题标签 [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.
prolog - 无缘无故的Prolog错误
我创建了以下脚本,但是,它给我一个错误,即使从我的角度来看它是完全正确的。可能是什么原因造成的?
当我使用以下命令运行它时:
它向我抛出以下错误:
prolog - Prolog分成两个列表问题
我有一个序言任务。
我需要查看列表中的第一个项目,看看它的后续项目是否相同,直到它们不同,然后将列表按第一个项目及其重复项分开。例如,如果我的列表是 a、a、a、b、c,它会将其分成第一个:a、a、a。第二:b,c。
我当前的解决方案有效,但最终匹配项进入第二个列表,而不是第一个。我似乎想不出一种方法让它出现在第一个列表中。
prolog - 如何跳过已经打印序言的元素
我试图在 Prolog 中做一个这样的练习:我介绍了这个列表[10,20, 10, 20, 30]
,程序显示:
这是我的代码:
但结果是这样的:
他向元素显示元素在列表中的次数。任何帮助,请!
list - 在 Prolog 中搜索(相同)两个元素的列表
如何在 Prolog 中的列表中搜索多次出现的特定元素?
例如,如果我们在列表中搜索[1,2,3,4,1]
元素1
,Prolog 应该返回true
,否则会返回false
所有其他数字。
这是我到目前为止所拥有的:
我的基本想法是搜索列表,直到找到我要查找的元素,然后再次在列表的尾部搜索该项目。我不想使用 Prolog 提供的 member() 函数。
如果查询询问,Prolog 还应该返回多次出现的元素:duplicate([1,2,3,4,1], X)
,应该打印X = 1
。
prolog - Prolog no_duplicate 函数
我正在尝试编写一个简单的程序来检查列表是否有任何重复项。这是我到目前为止所尝试的:
如果我尝试no_duplicates([1,2,3,3])
。它说的是真的。为什么是这样?我可能在这里误解了 Prolog,但感谢您提供任何帮助。
list - 将列表过滤到单独的列表中
我需要过滤列表[#,d,e,#,f,g]
,以便获得输出,
每次遇到“#”时[[d,e],[f,g]]
,我都会在创建新列表时卡住,有没有办法做到这一点?
我尝试了下面的代码,
prolog - 列表操作的奇怪结果
我正在尝试在 Prolog 中实现一些用于列表操作的谓词。一切都按预期工作。例如
示例查询:
但是我在使用“删除”谓词时遇到了麻烦。以下是它的实现方式:
结果错误的示例查询:
我已经用进一步的输入对其进行了测试,它总是返回一个预期长度的列表,所以它以某种方式工作。但是为什么我只得到那些神秘的 _GXXXX 而不是数字呢?
提前谢谢了!
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是否在X
term 之前Y
。如果
X
和Y
是相同的术语,那么X
term_precedesY
和Y
term_precedesX
都是假的。如果
X
和Y
有不同的类型:X
term_precedesY
iff 的
类型按以下顺序在类型之前:X
先于先于先于 先于。Y
variable
floating point
integer
atom
compound
注意——测试术语顺序的内置谓词
在 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
的显式遍历相比,这样做的开销非常低。(=..)/2
functor/3, arg/3
prolog - 为什么我们使用“!” 在序言中
这是我试图理解的代码。
'!' 有什么用?和上面代码中的谓词 p(,,)。或者任何人都可以在上述代码的每一步中添加注释,以便我能够理解。谢谢。
prolog - Prolog 查询规则顺序
Prolog 问题:刚开始学习 Prolog,这是我们收到的练习测验之一。
鉴于:
列出以下查询返回的所有答案。
我的问题是关于第二个查询。为什么不返回 A=thor。? 我搞砸了一点,如果我将 train2 更改为
当我运行第二个查询时,我得到
在这里快速解释一下为什么查询中的规则顺序很重要。谢谢。