0

例如有两个列表

List1 = [ [1,2,3,4], [2,4,5,4],[4,5,2,5],.....]
List2= [ [2,4,4,1], [5,6,1,2], [4,2,3,4],.....]

现在我想查看这两个列表,并将列表 1 中每个列表的第三个元素与 list2 进行比较。如果它们相同,则将列表留在 list1 中,然后继续下一个。如果它们不相同,则将列表放在不同列表(即列表 3)中的列表 1 的一侧。所以像

compare([][][]).
compare([[firstele, second ele, third ele, fourth ele]|list1],[firstele2, second ele2, third ele2, fourth ele2]|list2],list3):-
   ....... condition......

我该怎么做?

4

1 回答 1

0

看看下面的代码:

convert([],[]).
convert([L|Lt],[Q|Qt]) :- L>64, L<91, Q is L+32, convert(Lt,Qt).
convert([L|Lt],[L|Qt]) :- convert(Lt,Qt).

Prolog 总是寻找第一个真实的。因此,如果 line1 不为真,那么它将转到 line2,如果 line2 不为真,它将转到 line3。每一行都是真的,所有的陈述都必须是真的。使用此逻辑,如果 L>64,L<91 都为真,则 Q 为 L+32,将执行 convert(Lt,Qt)(两者都为真,第 3 行将不执行)。但是,如果 L>64,L<91 中的任何一个为假,则将执行第 3 行。所以传统的程序(如果你用 C 或 Java 编写上面的序言程序)将是

if(L>64 && L<91){
  Q=L+32;
  convert(Lt,Qt);
}
else if (the 1st of each list is same){
  convert(Lt,Qt);
}

希望这可以帮助。(我不明白您的确切问题,但您似乎正在寻找如何编写条件。)

于 2013-04-15T00:47:52.017 回答