将谓词应用于不同长度的列表列表

时间:2015-10-04 02:45:20

标签: list prolog element predicate

我需要将我的谓词应用于列表列表。我听说maplist / 3可能会这样做,但我列表中的列表长度可能不同,maplist喜欢所有相同的长度列表。

这是我需要应用于列表中所有列表的谓词。它检查相同位置的另一个列表中的任何元素是否相同,如果它们是,则返回false。 Ex:兼容([1,2,3,4,5],[1,6,7,3,2])将返回false,因为1匹配在第1个位置。这个谓词适用于不同长度的列表。

compatible([],_).
compatible(_,[]).
compatible([HA|TA],[HB|TB]) :-
    HA \= HB,
    compatible(TA,TB).

列表的示例列表可能如下所示:

[[3,4,6,6,7],[8,2,6,3,67],[7,4,7,4,3]],[[8,2,6,3,67],[7,4,7,4,3]]).

Let X and Y be the lists passed in.
where X=[[3,4,6,6,7],[8,2,6,3,67],[7,4,7,4,3]]
and Y=[[8,2,6,3,67],[7,4,7,4,3]]

我只需要将谓词应用于Y列表。我如何调用列表列表中的兼容性(记住不同的长度)。

*编辑以澄清更多:

因此,基本上会像这样调用

compatible([8,2,6,3,67],[7,4,7,4,3]).

从上面的列表中(它只被应用到Y列表中)。它会在这里回归。

如果我这样称为兼容:

compatible([8,2,6,3,3],[7,4,7,4,3]).

它会失败,因为3是两个列表的第5个元素。

0 个答案:

没有答案