2013-04-15 59 views
0

比如有两个列表SWI序言:列表操作

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的内部,即与列表2。如果它们相同,则将列表保留在list1中,然后继续下一个。如果它们不相同,则将列表1中的列表放在不同的列表(即列表3)中。所以 类似

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

我该怎么做?

+0

你能添加预期的输出吗? –

回答

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). 

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

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

希望这会有所帮助。 (我不明白你确切的问题,但似乎你正在寻找如何写条件。)

+0

谢谢你是伟大的,但我不应该使用内置的 像如果和所有的东西:/ – juniper

+0

我的答案没有内置函数。我的代码的第二部分是prolog程序的一个例子,如果你用Java或C编写它的话。 – faisal

+0

我已经看过这段代码,但我理解它,但是在我的特定场景中,我不知道如何替换列表 – juniper