2013-12-13 24 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