aboutsummaryrefslogtreecommitdiff
path: root/elymas/lib
diff options
context:
space:
mode:
authorDrahflow <drahflow@gmx.de>2014-03-26 00:48:47 +0100
committerDrahflow <drahflow@gmx.de>2014-03-26 00:48:47 +0100
commit1bc64babd1405bfa70567d576cdef3e45b508b95 (patch)
treeb535d5bfb665b1422ef44e9bef087192b63b1b44 /elymas/lib
parent08b33426f756a79b7500b0bea5597924def2bf87 (diff)
Container types
Diffstat (limited to 'elymas/lib')
-rw-r--r--elymas/lib/list.ey69
-rw-r--r--elymas/lib/map.ey14
2 files changed, 83 insertions, 0 deletions
diff --git a/elymas/lib/list.ey b/elymas/lib/list.ey
new file mode 100644
index 0000000..df5ba1c
--- /dev/null
+++ b/elymas/lib/list.ey
@@ -0,0 +1,69 @@
+<
+ [ ] ==:NONE
+
+ { -102 .len -021 ? } "#?" defmd
+ { .len } "#len" defmd
+ { 0 -01 .len range } "#dom" defmd
+ { [ 0 ] } _ "#in" deffd "#out" deffd
+ { ==m ==l
+ l .len {
+ l .start l .len 1 sub { 1 -01 * } rep
+ m .start 1 -102 =[]
+ l .len m .len add l .setLen
+ } {
+ m .start l .setStart m .len l .setLen
+ } ? *
+ m .end l .setEnd
+
+ 0 m .setLen
+ NONE m .setStart
+ NONE m .setEnd
+
+ l
+ } "#cat" defmd
+ { ==l =*f
+ l .start ==n
+ l .len { n 2 dearray =n f } rep
+ } "#each" defmd
+ { ==l l .len mod ==i
+ l .start i { 1 -01 * } rep
+ 0 -01 *
+ } "#*" defmd
+ { ==l ==i ==v
+ l .len not { "=[] into empty list" die } rep
+ l .start i l .len mod { 1 -01 * } rep
+ v 0 -102 =[]
+ } "#=[]" defmd
+ { ==l
+ list ==m
+ l .len {
+ [ 0 NONE ] _ m .setEnd
+ l .len 1 sub { [ 0 -102 ] } rep
+ m .setStart
+ l .len m .setLen
+ } { } ? *
+ m
+ } "#iclone" defmd
+ { 0 } "#istart" deffd
+ { .len eq } "#iend" defmd
+ { } "#itrans" deffd
+ { 1 add } "#istep" deffd
+
+ { { ==l [ -01 NONE ]
+ l .len {
+ _ 1 l .end =[]
+ } {
+ _ l .setStart
+ } ? *
+ l .setEnd
+ l .len 1 add l .setLen
+ }_ [ 0 ] [ ] '' * } /append defmd
+
+ { <
+ 0 ==len { =len } =*setLen
+ NONE ==start { =start } =*setStart
+ NONE ==end { =end } =*setEnd
+ > }
+> -- /list deffd
+
+# vim: syn=elymas
diff --git a/elymas/lib/map.ey b/elymas/lib/map.ey
new file mode 100644
index 0000000..5c5b0f0
--- /dev/null
+++ b/elymas/lib/map.ey
@@ -0,0 +1,14 @@
+<
+ { .v -01 . } "#*" defmd
+ { [ 0 ] } "#in" deffd
+ { [ 0 ] } "#out" deffd
+ { .v keys } "#dom" defmd
+ { .v ==v =*f v keys { v -01 . f } each } "#each" defmd
+ { 0 } "#istart" deffd
+ { .v keys len eq } "#iend" defmd
+ { 1 add } "#istep" deffd
+ { .v keys * } "#itrans" defmd
+ { < < { defv }' > ==v "#=[]" =* > } _ "#iclone" deffd
+> -- /map deffd
+
+# vim: syn=elymas