如何在 ISO Prolog 中为线性时间运行的两个变量列表的交集定义一个(元逻辑)谓词?变量可以以任何确定的顺序出现。没有像变量的“年龄”这样的实现相关属性必须影响结果。
与 类似library(ordsets)
,我们称关系varset_intersection(As, Bs, As_cap_Bs).
?- varset_intersection([A,B], [C,D], []).
true.
?-varset_intersection([A,B], [B,A], []).
false.
?- varset_intersection([A,B,C], [C,A,D], Inter).
Inter = [A,C].
or
Inter = [C,A].
?- varset_intersection([A,B],[A,B],[A,C]).
B = C
or
A = B, A = C
?- varset_intersection([A,B,C],[A,B],[A,C]).
idem
也就是说,第三个参数是一个输出参数,它与前两个参数的交集相统一。
请参阅当前 ISO 标准(包括Cor.2的 ISO/IEC 13211-1:1995 )的内置列表。
(请注意,我确实在几年前的另一个问题中回答了这个问题。但是,它对谷歌来说仍然是隐藏和不可见的。)