aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2014-03-26 02:40:36 +0100
committerDrahflow <drahflow@gmx.de>2014-03-26 02:40:36 +0100
commitc7cca242d151618ca2598bcb84c8bf5d1b5165ef (patch)
treed63947b084b69f3f9c24932b71956b710428e165 /elymas/lib
parent87a65610118849c4180b39803a3494fbeb96f4c8 (diff)
Sorting routine
Diffstat (limited to 'elymas/lib')
-rw-r--r--elymas/lib/map.ey2
-rw-r--r--elymas/lib/sort.ey25
2 files changed, 26 insertions, 1 deletions
diff --git a/elymas/lib/map.ey b/elymas/lib/map.ey
index 5c5b0f0..fd8c384 100644
--- a/elymas/lib/map.ey
+++ b/elymas/lib/map.ey
@@ -1,5 +1,5 @@
<
- { .v -01 . } "#*" defmd
+ { { .v -01 . }_ [ 0 ] [ 0 ] '' * } "#*" defmd
{ [ 0 ] } "#in" deffd
{ [ 0 ] } "#out" deffd
{ .v keys } "#dom" defmd
diff --git a/elymas/lib/sort.ey b/elymas/lib/sort.ey
new file mode 100644
index 0000000..163062a
--- /dev/null
+++ b/elymas/lib/sort.ey
@@ -0,0 +1,25 @@
+{ _ /a deff dom /d deff
+ { ==e ==s
+ s e eq { [ s d ] } {
+ s e add 2 div ==m
+ s m mergeSort =*x 0 ==i
+ m 1 add e mergeSort =*y 0 ==j
+ [
+ { i |x len lt j |y len lt and } {
+ i x a j y a lt {
+ i _ x -01 1 add =i
+ } {
+ j _ y -01 1 add =j
+ } ? *
+ } loop
+ { i |x len lt } { i _ x -01 1 add =i } loop
+ { j |y len lt } { j _ y -01 1 add =j } loop
+ ]
+ } ? *
+ } /mergeSort deffst
+ 0 |d len 1 sub mergeSort
+} /order deffd
+
+{ _ order -01 { * }_ [ 0 ] [ 0 ] '' * } /sort deffd
+
+# vim: syn=elymas