prolog - 多集序言中的差分函数
问题描述
我想计算两个列表之间的差异 -
这是我的尝试
difference(X, [], X).
difference(H,[S|T],H):-
del(S, H, H2),
difference(H2, T, H2).
del(Y,[Y],[]).
del(X,[X|L1],L1).
del(X,[Y|L],[Y|L1]):-del(X,L,L1).
但是当我调用它时 difference([a,a,b,b,b,c,d,d],[b,b,c,c,c,d,d,e],X). false.
它返回 false 而不是给出差异。
对于这种情况,答案应该是{a, a, b}
解决方案
试试下面的代码:
difference(A, [], A).
difference(A, [X|C], D) :- del(X, A, B), difference(B, C, D).
del(_, [], []).
del(X, [X|B], B).
del(X, [Y|B], [Y|C]) :- X \= Y, del(X, B, C).
运行示例:
?- difference([a,a,b,b,b,c,d,d],[b,b,c,c,c,d,d,e],X).
X = [a, a, b] ;
false.
推荐阅读
- javascript - Chrome 控制台不显示我的文件路径,只显示一个包裹
- c# - 如何在循环中使用 PostAsync() 请求?
- postgresql - Docker / Postgres - 尝试运行 2 个数据库和 2 个 api,无法连接
- android - 应用更改并重新启动活动(禁用:不兼容的设备 API 级别)
- javascript - 在 AWS Lambda node.js 函数中使用 async/await 引发错误
- android - 如何使用 Firestore 数据库:在 Kotlin 中使用 await() addSnapshotListener?
- javascript - 显示图像使页面空白 React JS
- python - 如何突出显示 Altair 热图中的列?
- unity3d - 混合现实键盘小数点
- makefile - makefiles 隐式规则说文件是最新的,但文件甚至不存在