我在 Maple 7 上编写此代码,但它应该适用于几乎任何版本的 Maple。我觉得先把原来的嵌套列表剥离成两个简单的列表比较容易做:
input:=[[a,b],[c],[d,e,f]];
flatlist:=[seq(op(input[n]),n=1..nops(input))]; % flat list of all elements
noels:=[seq(nops(input[n]),n=1..nops(input))]; % numbers of elements in sub-lists
将额外的元素插入新的平面列表更容易:
newlists:=[seq([seq(flatlist[i],i=1..n-1),x,seq(flatlist[i],i=n..nops(flatlist))],n=1..nops(flatlist))];
newnoels:=[seq(seq([seq(noels[i],i=1..n-1),noels[n]+1,seq(noels[i],i=n+1..nops(noels))],m=1..noels[n]),n=1..nops(noels))];
生成的平面列表必须转换回嵌套列表。这可以通过编写一个简单的函数来完成:
mergelists:=proc(flatlist,noels)
local i,j,n,result;
i:=0; result:=NULL;
for n from 1 to nops(noels) do
result:=result,[seq(flatlist[i+j],j=1..noels[n])];
i:=i+noels[n];
od;
return [result];
end:
使用此功能,现在可以轻松地将准备好的数据转换为所需的格式:
output:=[seq(mergelists(newlists[n],newnoels[n]),n=1..nops(newlists))];
我承认这可能不是最优雅的解决方案。不幸的是,我现在没有想到更简单的事情。