我有以下列表:
[[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 :(得分: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).