2013-04-15 89 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