prolog-dif相关内容

非成员规则在 Prolog 中无法按预期工作

我正在尝试在 Prolog 中创建一个迷宫程序,其目的是找到一条从迷宫起点到迷宫中心点 m 的路线.迷宫由使用四种颜色之一连接的正方形组成:蓝色、绿色、紫色或橙色.从起点到中心的路线遵循四种颜色的重复模式. 我创建了以下代码: link2(A, Colour, B) :- 链接(A, Colour, B).链接2(A,颜色,B):-链接(B,颜色,A).改变颜色(蓝色,绿色).改变颜色(绿 ..
发布时间:2022-01-12 10:53:29 其他开发

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

这有什么区别: X \= Y 还有这段代码: dif(X, Y) 我认为它们的行为应该相同,但事实并非如此.示例如下: n_puta(L, N, X) :- nputa(L, N, 0, X).nputa([], N, C, _) :- N = C.nputa([G|R], N, C, X) :- G = X, nputa(R, N, Y, X), C 是 Y - 1.nputa([G| ..
发布时间:2022-01-12 10:38:52 其他开发

如果直接插入,为什么 Prolog 会将变量与失败的结果匹配?

我正在制作一个 Prolog 程序来查找一组列表的子集.这个子集必须匹配一些特定的条件,其中一个方面是子集的列表不能相同.令我困惑的是,当我尝试为变量 X 找到匹配项时,如果我将它们插入查询中而不是 X,它会生成返回 false 的结果.例如: ?- containsSet(2, [[3],[7],[7]], X).X = [[3], [7]] ;X = [[3], [7]] ;X = [[7] ..
发布时间:2022-01-12 10:31:44 其他开发

我想计算列表中某个元素的出现次数

我想计算列表中某个元素的出现次数,如果有,则谓词唯一性为真,否则为假.但是,如果元素出现不止一次,Prolog 会发现它是真的.我不知道该怎么办... count([], X, 0).count([X|T], X, Y) :- count(T, X, Z),Y 为 1+Z,写入(Z).计数([_|T],X,Z):-计数(T,X,Z).唯一(St,[Y|RestList]):-计数([Y|Rest ..
发布时间:2022-01-12 10:18:41 其他开发

序言列表高原

刚被介绍给prolog,试图完成一些简单的练习,但我一直在这个问题上卡住了.我正在尝试编写一个输出输入列表的所有子列表的程序,其中每个子列表的长度> 1,并且不能扩展到更大的子列表.它还将输出子列表列表中的起始位置.所以一个示例输出将是 |?- 高原([a,a,b,2,2,2,a+1,a+1,s(1,2)], I, Len).我 = 1,连 = 2 ?;我 = 4,连 = 3 ?;我 = 7,连 ..
发布时间:2022-01-12 10:17:55 其他开发

Prolog分成两个列表问题

我有一个序言作业. 我需要查看列表中的第一个项目,看看它的后续项目是否相同,直到它们不同为止,然后将列表按第一个项目及其重复项分开.例如,如果我的列表是 a、a、a、b、c,它会将其分成第一个:a、a、a.第二:b,c. 我当前的解决方案有效,只是最终匹配项进入第二个列表,而不是第一个.我似乎想不出办法让它出现在第一个列表中. grab([],[],[]).抓取([A,A|L],[A ..
发布时间:2022-01-12 10:10:10 其他开发

是“几乎纯"的Prolog 富有表现力?

@false 评论了 较早: 是的,您可以在没有 dif/2 的情况下实现图灵机.但是你甚至不能实现交集或类似的谓词. 假设我们确实扩展了纯 Prolog (Horn FOL + CWA + UNA) 与 call/N、dif/2、(=)/3,要在if_/3中使用,会不会还有差距?表现力,ie 定义微不足道的事物,例如,Scheme,但是在这种扩展的(几乎是纯的)Prolog 中更难说 ..

使用手动列表迭代与失败递归的优缺点是什么

我总是遇到这种情况,但我永远不知道用哪种方法来解决它.以下是处理某些季节事实的两种方法. 我正在努力解决的是使用方法1还是2,以及每种方法的优缺点,尤其是大量的事实. methodone 似乎很浪费,因为事实是可用的,为什么还要构建它们的列表(尤其是大列表).如果列表足够大,这也一定会影响内存?而且它没有利用 Prolog 的自然回溯功能. methodtwo 利用回溯为我进行递 ..
发布时间:2022-01-12 10:04:48 其他开发

different/2 - 是否存在纯粹的、确定的定义?

不同(Xs,Ys):-成员(X,Xs),非成员(X,Ys).不同(Xs,Ys):-成员(Y,Ys),非成员(Y,Xs). 虽然此定义使用 member/2 和 non_member/2 几乎是1 从声明的角度来看是完美的,它为某些查询生成冗余解决方案,并在周围留下选择点. 什么是对此进行改进的定义(以纯粹的方式可能使用 if_/3 和 (=)/3) 以便描述完全相同的解决方案集通过 dif ..
发布时间:2022-01-12 10:04:41 其他开发

强制 Prolog 选择变量的唯一值

好的,我是 Prolog 的新手,所以如果这是微不足道的事情,请原谅,但我似乎找不到合适的优雅答案.我正在尝试在 learnprolognow.org,练习 2.4(填字游戏). 该练习提供了以下事实: 单词(astante, a,s,t,a,n,t,e).字(阿斯托利亚,a,s,t,o,r,i,a).单词(baratto,b,a,r,a,t,t,o).字(钴,c,o,b,a,l,t,o ..
发布时间:2022-01-12 10:03:52 其他开发

Prolog中失败谓词的用途是什么?

我想不出我需要它的情况. 解决方案 优雅的系统提供 false/0 作为命令式 fail/0 的声明同义词.一个有用的示例是当您手动想要强制回溯以产生副作用时,例如: ?- between(1,3,N), format("line ~w\n", [N]), false.1号线2号线3号线 除了 false/0,您还可以使用任何失败的目标,例如短一点: ?- between(1,3,N ..
发布时间:2022-01-12 10:00:26 其他开发

Prolog:第一个重复值

我需要在列表中找到第一个重复值. prep(3,[1,3,5,3,5]).应该是真的. prep(5,[1,3,5,3,5]).应该是假的. 我想检查当前值和以前的列表成员是否相等,直到找到重复项,如果找到一个,它将测试与 X 是否相等,但我不知道如何在 Prolog 中做到这一点! 感谢您的帮助!谢谢 解决方案 这是一个使用 dif/2 实现声音不等式的纯版本.d ..
发布时间:2022-01-12 09:58:33 其他开发

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

标准术语顺序(ISO/IEC 13211-1 7.2 术语顺序)定义在所有术语上——包括变量.虽然这个有很好的用途——想想 setof/3 的实现,这使得 8.4 术语比较中内置函数的许多其他干净和合乎逻辑的使用变成了与 imps(命令式构造的缩写形式)的声明性噩梦.8.4 词条比较特征: 8.4 词条比较 8.4.1 (@=8.4.2 compare/3. 8.4.3 sort/2 ..
发布时间:2022-01-12 09:58:16 其他开发

使用 \==/2 或 diff/2

如果我想确保两个变量不会实例化为同一个术语,那么首选的方法是什么? 假设我需要在图中找到有向边,而一个节点自身不能有边: 节点(a,x,y).节点(b,z,x).节点(c,y,y). (这里的边是a -> c,b -> a,但不是 c -> c) 以下作品: edge(A, B) :- 节点(A, _, X), 节点(B, X, _), A \== B. 这也有效 [swi-p ..
发布时间:2022-01-12 09:56:16 其他开发

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

我无法理解为什么我在 prolog 中的代码会根据我放入规则的顺序来执行某些操作. 这是我的数据库: 父母(汤姆,鲍勃).父母(汤姆,莉兹).父母(玛丽,鲍勃).父母(玛丽,丽兹).男(汤姆).男(鲍勃).女(玛丽).女(丽兹). 以下是规则: %difference(X, Y) ==>用于检查两个人 X 和 Y 是否不是同一个人的谓词.差异(X,Y):- \==(X,Y).父亲(X, ..
发布时间:2022-01-12 09:54:07 其他开发

Prolog 查询返回 H128

在下面的查询中,首先我得到 X = H128,它来自哪里?另外为什么它返回是?是不是因为变量 X 实际上没有定义而我们正在测试该条件? ?- 不是(X==3).X = H128是的 解决方案 您的查询正在使用未实例化的变量 (X).当检查 X 是否用术语 3 it (X==3) 实例化时,它失败,因为 X 未实例化. 因此,not(X==3) 会成功,因为 prolog 引擎无法证明 ..
发布时间:2021-06-22 19:03:44 其他开发

什么永远不等于自己?

Prolog 中是否存在不等于自身的值?我写answer到一些问题关于树的最小,这个答案还说,如果树为空,则最小为空.起初听起来不错,但现在我认为这听起来很糟糕. 如果 null null,没问题.但在 Prolog 中,我看到 null 只是原子所以...... ?- null = null.真的.?- null == null.真的.?-差异(空,空).错误的. 我怎样才能在 P ..
发布时间:2021-06-22 19:03:12 其他开发

如何使用 diff/2 防止生成序列中的重复?

在回答关于 StackOverflow 的另一个问题关于(概括一点)生成由有限元素集形成的所有序列,没有重复出现. 正如鲍里斯在评论中正确指出的那样,这个问题有许多现有的解决方案.但是,我对不使用累加器(即,要与新选择的元素进行比较的已选择元素的列表)但使用 dif/2 语句的解决方案感兴趣. 为了说明,在我的以下程序中,我有 4 个元素,并且在 4 次递归调用之后,有几个 div/2 ..
发布时间:2021-06-22 19:01:47 其他开发