我需要将我的谓词应用于列表列表。我听说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个元素。