aboutsummaryrefslogtreecommitdiff
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
parent87a65610118849c4180b39803a3494fbeb96f4c8 (diff)
Sorting routine
-rw-r--r--compiler/standardClient.ey6
-rw-r--r--elymas/lib/map.ey2
-rw-r--r--elymas/lib/sort.ey25
-rw-r--r--elymas/loaded.ey1
-rw-r--r--elymas/shared.ey1
-rw-r--r--examples/working-loaded/sort.test11
6 files changed, 42 insertions, 4 deletions
diff --git a/compiler/standardClient.ey b/compiler/standardClient.ey
index 36f8472..a626790 100644
--- a/compiler/standardClient.ey
+++ b/compiler/standardClient.ey
@@ -1,8 +1,8 @@
## dynamic member lookup fallback routines
{ -- 0 } "#.?" deffd
-{ keys dump "undefined member in .: " -01 cat die } "#." defmd
-{ keys dump "undefined member in .|: " -01 cat die } "#.|" defmd
-{ keys dump "undefined member in =: " -01 cat die } "#.=" defmd
+{ keys dump "undefined member in .: " dump dump "" die } "#." defmd
+{ keys dump "undefined member in .|: " dump dump "" die } "#.|" defmd
+{ keys dump "undefined member in =: " dump dump "" die } "#.=" defmd
## regex support
# ideas taken from http://swtch.com/~rsc/regexp/regexp3.html
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
diff --git a/elymas/loaded.ey b/elymas/loaded.ey
index c9c0eda..19cbc05 100644
--- a/elymas/loaded.ey
+++ b/elymas/loaded.ey
@@ -14,6 +14,7 @@
"lib/net/alg/uri.ey"
"lib/list.ey"
"lib/map.ey"
+ "lib/sort.ey"
] { _ dump include }' each
{
diff --git a/elymas/shared.ey b/elymas/shared.ey
index 8c25b93..8131e16 100644
--- a/elymas/shared.ey
+++ b/elymas/shared.ey
@@ -15,6 +15,7 @@
"lib/net/alg/uri.ey"
"lib/list.ey"
"lib/map.ey"
+ "lib/sort.ey"
] { _ dump include }' each
{
diff --git a/examples/working-loaded/sort.test b/examples/working-loaded/sort.test
new file mode 100644
index 0000000..aff323b
--- /dev/null
+++ b/examples/working-loaded/sort.test
@@ -0,0 +1,11 @@
+"lib/sort.ey" include
+
+[ 99 7 2 3 ] order dump
+map ==m
+
+99 /foo m =[]
+7 /bar m =[]
+2 /quux m =[]
+3 /baz m =[]
+
+m sort dump