13 lines
524 B
Text
13 lines
524 B
Text
fcn permute(seq)
|
|
{
|
|
insertEverywhere := fcn(x,list){ //(x,(a,b))-->((x,a,b),(a,x,b),(a,b,x))
|
|
(0).pump(list.len()+1,List,'wrap(n){list[0,n].extend(x,list[n,*]) })};
|
|
insertEverywhereB := fcn(x,t){ //--> insertEverywhere().reverse()
|
|
[t.len()..-1,-1].pump(t.len()+1,List,'wrap(n){t[0,n].extend(x,t[n,*])})};
|
|
|
|
seq.reduce('wrap(items,x){
|
|
f := Utils.Helpers.cycle(insertEverywhereB,insertEverywhere);
|
|
items.pump(List,'wrap(item){f.next()(x,item)},
|
|
T.fp(Void.Write,Void.Write));
|
|
},T(T));
|
|
}
|