From c7cca242d151618ca2598bcb84c8bf5d1b5165ef Mon Sep 17 00:00:00 2001 From: Drahflow Date: Wed, 26 Mar 2014 02:40:36 +0100 Subject: Sorting routine --- compiler/standardClient.ey | 6 +++--- elymas/lib/map.ey | 2 +- elymas/lib/sort.ey | 25 +++++++++++++++++++++++++ elymas/loaded.ey | 1 + elymas/shared.ey | 1 + examples/working-loaded/sort.test | 11 +++++++++++ 6 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 elymas/lib/sort.ey create mode 100644 examples/working-loaded/sort.test 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 -- cgit v1.2.3