diff options
| author | Drahflow <drahflow@gmx.de> | 2014-03-26 02:40:36 +0100 |
|---|---|---|
| committer | Drahflow <drahflow@gmx.de> | 2014-03-26 02:40:36 +0100 |
| commit | c7cca242d151618ca2598bcb84c8bf5d1b5165ef (patch) | |
| tree | d63947b084b69f3f9c24932b71956b710428e165 | |
| parent | 87a65610118849c4180b39803a3494fbeb96f4c8 (diff) | |
Sorting routine
| -rw-r--r-- | compiler/standardClient.ey | 6 | ||||
| -rw-r--r-- | elymas/lib/map.ey | 2 | ||||
| -rw-r--r-- | elymas/lib/sort.ey | 25 | ||||
| -rw-r--r-- | elymas/loaded.ey | 1 | ||||
| -rw-r--r-- | elymas/shared.ey | 1 | ||||
| -rw-r--r-- | examples/working-loaded/sort.test | 11 |
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 |
