我正在制作一个 Prolog 程序来查找一组列表的子集。这个子集必须匹配一些特定的条件,其中一个方面是子集的列表不能相同。令我困惑的是,当我尝试查找变量 X 的匹配项时,如果我将它们插入查询中而不是 X,它会生成返回 false 的结果。例如:
?- containsSet(2, [[3],[7],[7]], X).
X = [[3], [7]] ;
X = [[3], [7]] ;
X = [[7], [7]] ;
false.
?- containsSet(2, [[3],[7],[7]], [[7],[7]]).
false.
如果直接插入时返回 false,它怎么可能将 X 与 [[7], [7]] 匹配?
containsSet 的想法是找到一个长度为 N(在本例中为 2)的列表子集,该子集在匹配位置没有匹配元素(即子集中没有两个列表具有相同的第一个元素或相同的第二个元素等) . 在上面的示例中,[7] 和 [7] 的第一个(也是唯一一个)元素匹配,因此它返回 false。