【发布时间】:2014-10-09 18:52:22
【问题描述】:
我想根据子列表的长度从短到长重新排列列表。
预期的输出是:
rearrange([[a,b],[c],[a,b,c],[d,d,d],[d,s],[s],[d,s,s,a]],X).
X=[[c],[s],[a,b],[d,s],[a,b,c],[d,d,d],[d,s,s,a]].
我的想法是先计算每个长度,然后重新排列。 到目前为止,我所做的是使用模式 [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)
).
count(LIST,X)输出如下:
21 ?- count_slot([[2],[3],[4],[2,3,4]],X).
X = [1-3].
但是预期的输出是[1-3,3-1],我不知道如何处理其余的子列表(一个一个删除??)并根据模式重新排列它们[1-3, 3-1]。
有人可以帮忙吗?提前致谢。
【问题讨论】:
标签: prolog