15 lines
449 B
Text
15 lines
449 B
Text
# Numeric fields as numerics
|
|
fcn fieldize(s){
|
|
s.apply(fcn(c){"1234567890".holds(c) and c or "."}).split(".")
|
|
.filter().apply("toInt");
|
|
}
|
|
fcn fcmp(a,b){ // T(key, T(numeric fields)), eg L(0, L(100,99,0))
|
|
a[1].zip(b[1]).reduce(fcn(_,[(a,b)]){
|
|
if(a==b)return(True); // continue to next field
|
|
return(Void.Stop,a<b);
|
|
},True);
|
|
}
|
|
fcn fsort(list){
|
|
list.apply(fieldize).enumerate().sort(fcmp)
|
|
.apply('wrap([(n,_)]){list[n]});
|
|
}
|