2013-12-13 26 views
0

我有以下列表: [[1,1,3],[1,2,7],[1,3,9],[2,1,2],[2,2,7],[3,1,4]]。 我只對列表中每個元素的前兩個組件感興趣。爲了讓它正確,我知道我缺少一個組件,例如,[2,3,2]。我可以確定列表中(a,b,c)中b的最大值。我想將缺失的元素插入到正確的位置。在列表中插入缺失的元素

我已經開始用:

work_list([],_,_,_). 
work_list([[A,B,_]|F],Alast,Blast,Max):- 
A==Alast, work_list(F,A,B,M). 
work_list([[A,B,_]|F],Alast,Blast,Max):- 
A>Alast, Blast<Max, work_list_miss(F,Alast,Blast,Max). 

work_list_miss(F,Alast,Blast,Max):- 
    Blast<Max, Blast1 is Blast+1, add_list([Alast,Blast,1],F,FNew). 
work_list_miss(F,Alast,Blast,Max):- 
    Blast=Max, Blast1, add_list([Alast,Blast,1],F,FNew), worklist(F,Alast,Blast,Max). 

add_list(A,B,[A|B]). 

它不工作。任何人都可以提供幫助嗎?上市時應顯示: [[1,1,3],[1,2,7],[1,3,9],[2,1,2],[2,2,7],[2,3,1],[3,1,4]] 謝謝!

+0

什麼謂詞調用你做什麼你的意思是「它不工作」? – lurker

+0

你可以改正你的代碼刪除單身人士和未定義的調用,然後重試... – CapelliC

+0

我的意思是我沒有得到我顯示的列表結果。 – user3038679

回答

0

您的代碼需要大量的修訂和調試。考慮轉而使用非確定性,以獲得行爲:這裏是一個謂語插入的E到一個列表I,處理列表分割,讓你把注意力集中在比較

insert_between(E, I, O) :- 
    append(X, [Y,Z|T], I), 
    Y =< E, E < Z -> append(X, [Y,E,Z|T], O). 
+0

我是初學者,所以我仍然有一些理解序言的問題。 O在謂詞中做什麼? – user3038679

+1

符號:E代表元素,O代表輸出,I代表輸入 - 請原諒我的懶惰... – CapelliC

+0

對不起,它可能看起來很基本,X? – user3038679