Prolog学习:如何使用overlap(A,B)谓词定义disjoint(S1,S2)谓词
基于overlap谓词实现disjoint谓词的方法
两个集合不相交的定义就是不存在公共元素,恰好是你已经实现的overlap(A,B)谓词的反面,直接对overlap的结果取否定即可,代码实现如下:
disjoint(S1, S2) :- \+ overlap(S1, S2).
相关说明
- Prolog中的
\+运算符对应否定即失败的语义:当overlap(S1,S2)可以被证明为真时,\+ overlap(S1,S2)返回假;当overlap(S1,S2)无法被证明为真时,\+ overlap(S1,S2)返回真,完全符合不相交集合的判断需求。 - 你可以直接用测试用例验证效果:
disjoint([1,2],[3,4])会返回真,disjoint([1,2],[2,3])会返回假,和你预期的判断逻辑一致即可。 - 如果你的
overlap谓词支持未完全实例化的列表查询,disjoint也会继承对应的能力,不需要额外修改逻辑。
内容的提问来源于stack exchange,提问作者Cassandra
相关产品推荐
相关产品推荐

