在列表中插入缺少的元素

时间:2013-12-13 00:56:55

标签: prolog

我有以下列表: [[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]] 谢谢!

1 个答案:

答案 0 :(得分: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).