0
我想根据从小到大的子列表长度的发生来重新排列列表。例如,期望的答案由子列表的长度数重新排列,有一个长度为4,双长度的1,三米长度的3和四个长度2.序言中的重新排序列表
实施例的查询,并将其结果的:
lists_ascending([[a,b],[c],[a,b,c],[d,d,d],[d,s],[s],[d,s,s,a], [s,a],[s,t],[a,b,w]],Ls).
Ls = [[d,s,s,a],[c],[s],[a,b,c],[d,d,d],[a,b,w],[a,b],[d,s],[s,a],[s,t]]
我的意见是计算每个长度的第一和然后执行重排。到目前为止我所做的是使用模式[length-number]来收集长度等于第一个子列表的子列表数量。
count([],[0-0]).
count([A|B],[L-N]):-
length(A,L),
same_length(B,L,M),
N is M+1.
same_length([],_,0).
same_length([A|B],L,N) :-
( length(A,L)->
same_length(B,L,M),
N=M+1
; same_length(B,L,N)
).
计数(LIST,X)输出如下:
21 ?- count_slot([[2],[3],[4],[2,3,4]],X).
X = [1-3].
但预计产量为[1-3,3-1],我不知道该如何处理剩下的子列表(逐个删除??)并根据模式[1-3,3-1]重新排列它们。
有人可以帮忙吗?先谢谢了。
你的理解不对, – 2014-10-09 11:49:01
如果你使用List =([[2],[3],[4],[2,3,4]],Ls)。然后期望的结果是LS = [[2,3,4],[2],[3],[4]]。 由于只有一个长度为3的子列表和三个长度仅为1的子列表,这个问题与那个不同。仔细阅读~~ – 2014-10-09 11:49:34
这也是你得到的结果:'? - lists_ascending_appearences([[2],[3],[4],[2,3,4]],Ls).'产生:'Ls = [[ 2,3,4],[2],[3],[4]] – mat 2014-10-09 12:42:03