Prolog:识别两个函子是否相同,没有变量绑定

时间:2019-03-08 15:39:26

标签: prolog

所以我有两个列表:

[location(A),package(B)]

[location(C),package(B),truck(D)]

我想将它们加在一起而不添加相同的术语。也就是说,结果应该是

[location(A),package(B),location(C),truck(D)] %Package B doesn't get repeated

我可以编写自己的remove_duplicates,但是它将location(A)标识为匹配的location(C),并且我俩都需要。

目的是要制定一条规则,稍后再声明,在该规则中我可能引用了多个位置,包裹和卡车。该规则包含变量,因此它可以将不同的状态/情况与指定的位置,包裹和卡车进行匹配。我的学习算法在搜索正确的前提条件集时为其添加了前提条件。

如果这需要使用基本术语来完成,我想我会遇到一个问题,那就是它以后必须是变量。

1 个答案:

答案 0 :(得分:3)

假设顺序不重要,则简单的解决方案是使用事实上的标准append/3谓词和标准sort/2谓词。例如:

| ?- append([location(A),package(B)], [location(C),package(B),truck(D)], List), sort(List, Sorted).

List = [location(A),package(B),location(C),package(B),truck(D)]
Sorted = [location(A),location(C),package(B),truck(D)]