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

List 将谓词应用于不同长度的列表,list,prolog,element,predicate,List,Prolog,Element,Predicate,我需要将谓词应用于列表列表。我听说maplist/3可能可以做到这一点,但我在列表中的列表长度可能不同,maplist喜欢所有长度相同的列表 下面是我需要应用于列表中所有列表的谓词。它检查位于同一位置的另一个列表中的任何元素是否相同,如果相同,则返回false。例如:compatible[1,2,3,4,5],[1,6,7,3,2]将返回false,因为1在第一个位置匹配。此谓词适用于不同长度的列表 compatible([],_). compatible(_,[]). compatible([

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

下面是我需要应用于列表中所有列表的谓词。它检查位于同一位置的另一个列表中的任何元素是否相同,如果相同,则返回false。例如:compatible[1,2,3,4,5],[1,6,7,3,2]将返回false,因为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]]
compatible([8,2,6,3,3],[7,4,7,4,3]).
我只需要将谓词应用于Y列表。我将如何在列表列表中调用compatible来做到这一点,同时记住不同的长度

*编辑以澄清更多信息:

因此,我们基本上会这样称呼兼容

compatible([8,2,6,3,67],[7,4,7,4,3]).
从上面的列表中,它仅应用于列表的Y列表。在这里它会变成真的

如果我这样叫compatible:

[[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]]
compatible([8,2,6,3,3],[7,4,7,4,3]).

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

尝试所有selectl,LoL,Ls,maplistcompatibleL,L这让我陷入某种无限循环,什么是Ls?Ls是没有L的LoL,代码似乎可以工作-但是有一个要删除的闭合参数?-LoL=[[8,2,6,3,67],[7,4,7,4,3]],所有selectl,LoL,Ls,maplistcompatibleL,Ls。为真?-LoL=[[8,4,6,3,67],[7,4,7,4,3]],用于所有SELECTL、LoL、Ls、MAPLISTPATABILEL、Ls。给假。