++ja
Jar engine
A container arm for jar
operation arms. A jar
is a map
of list
s. The contained arms inherit the sample jar.
Accepts
a
is a jar.
Produces
A core.
Source
++ ja=| a=(tree (pair * (list))) :: (jar)|@
Examples
> ~(. ja (my [a+1 b+2 ~]))< 2.ngd[ a?(%~[ n=[?(p=%a p=%b) q=@ud]l=nlr([p=?(%a %b) q=@ud])r=nlr([p=?(%a %b) q=@ud])])<123.zao 46.hgz 1.pnw %140>]>
++get:ja
Grab value by key
Produces the list at key b
in jar a
.
Accepts
a
is a jar
, and is the sample of +ja
.
b
is a noun.
Produces
A list
.
Source
++ get|* b=*=+ c=(~(get by a) b)?~(c ~ u.c)
Examples
> =j `(jar @t @ud)`(malt ~[['a' `(list @ud)`~[1 2 3]] ['b' `(list @ud)`~[4 5 6]]])> j{[p='b' q=~[4 5 6]] [p='a' q=~[1 2 3]]}> `(list @ud)`(~(get ja j) 'a')~[1 2 3]> `(list @ud)`(~(get ja j) 'b')~[4 5 6]> `(list @ud)`(~(get ja j) 'c')~
++add:ja
Prepend to list
Adds c
to the head of the list at key b
in jar a
. If b
does not exist in a
, a new key-value pair is added with a list containing c
.
Accepts
a
is a jar
, and is the sample of +ja
.
b
is a noun of the same type as the keys in a
.
c
is a noun of the same type the lists in a
contain.
Produces
A jar
.
Source
++ add|* [b=* c=*]=+ d=(get b)(~(put by a) b [c d])
Examples
> =j `(jar @t @ud)`(malt ~[['a' `(list @ud)`~[1 2 3]] ['b' `(list @ud)`~[4 5 6]]])> j{[p='b' q=~[4 5 6]] [p='a' q=~[1 2 3]]}> `(jar @t @ud)`(~(add ja j) 'b' 7){[p='b' q=~[7 4 5 6]] [p='a' q=~[1 2 3]]}> `(jar @t @ud)`(~(add ja j) 'c' 8){[p='b' q=~[4 5 6]] [p='a' q=~[1 2 3]] [p='c' q=~[8]]}
++ju
Jug operations
Container arm for jug operation arms. A jug
is a map
of set
s. The contained arms inherit its sample jug, a
.
Accepts
a
is a jug
.
Produces
A core.
Source
++ ju=| a=(tree (pair * (tree))) :: (jug)|@
Example
> =j `(jug @t @ud)`(malt ~[['a' (silt ~[1 2 3])] ['b' (silt ~[4 5 6])]])> j{[p='b' q={5 6 4}] [p='a' q={1 2 3}]}> ~(. ju j)<5.cws [a=nlr([p=@t q=nlr(@ud)]) <123.zao 46.hgz 1.pnw %140>]>
++del:ju
Remove
Produces jug a
with value c
removed from set located at key b
.
Accepts
a
is a jug, and is the sample of +ju
.
b
is a noun of the same type as the keys in a
.
c
is a noun of the same type as the sets in a
contain.
Source
++ del|* [b=* c=*]^+ a=+ d=(get b)=+ e=(~(del in d) c)?~ e(~(del by a) b)(~(put by a) b e)
Examples
> j{[p='b' q={5 6 4}] [p='a' q={1 2 3}]}> `(jug @t @ud)`(~(del ju j) 'b' 6){[p='b' q={5 4}] [p='a' q={1 2 3}]}> `(jug @t @ud)`(~(del ju j) 'b' 10){[p='b' q={5 6 4}] [p='a' q={1 2 3}]}> `(jug @t @ud)`(~(del ju j) 'c' 10){[p='b' q={5 6 4}] [p='a' q={1 2 3}]}
++gas:ju
Concatenate
Add each of the key-value pairs in list b
to jug a
. The values in b
are the type the sets in a
contain. For keys in b
that exist in a
, the values will be added to their sets. For keys in b
that don't exist in a
, new keys and sets will be added.
Accepts
a
is a jug
, and is the sample of +ju
.
b
is a (list [p q])
, where:
p
is a noun, the type of the keys ina
.q
is a noun, the type the sets ina
contain.
Produces
A jug
.
Source
++ gas|* b=(list [p=* q=*])=> .(b `(list _?>(?=([[* ^] ^] a) [p=p q=n.q]:n.a))`b)|- ^+ a?~ ba$(b t.b, a (put p.i.b q.i.b))
Examples
> =j `(jug @t @ud)`(malt ~[['a' (silt ~[1 2 3])] ['b' (silt ~[4 5 6])]])> j{[p='b' q={5 6 4}] [p='a' q={1 2 3}]}> `(jug @t @ud)`(~(gas ju j) ~[['a' 10] ['a' 42] ['b' 999] ['c' 7]]){[p='b' q={5 6 4 999}] [p='a' q={10 42 1 2 3}] [p='c' q={7}]}
++get:ju
Retrieve set
Produces a set retrieved from jug a
using key b
.
Accepts
a
is a jug, and the sample of +ju
.
b
is key, a noun of the same type as the keys in a
.
Produces
A set
.
Source
++ get|* b=*=+ c=(~(get by a) b)?~(c ~ u.c)
Examples
> =j `(jug @t @ud)`(malt ~[['a' (silt ~[1 2 3])] ['b' (silt ~[4 5 6])]])> j{[p='b' q={5 6 4}] [p='a' q={1 2 3}]}> `(set @ud)`(~(get ju j) 'a'){1 2 3}> `(set @ud)`(~(get ju j) 'b'){5 6 4}> `(set @ud)`(~(get ju j) 'c'){}
++has:ju
Check contents
Computes whether a value c
exists within the set located at key b
with jug a
, producing a flag.
Accepts
a
is a jug
, and the sample of +ju
.
b
is a noun of the same type as the keys in a
.
c
is a noun of the same type as the sets in a
contain.
Produces
A ?
.
Source
++ has|* [b=* c=*]^- ?(~(has in (get b)) c)
Examples
> =j `(jug @t @ud)`(malt ~[['a' (silt ~[1 2 3])] ['b' (silt ~[4 5 6])]])> j{[p='b' q={5 6 4}] [p='a' q={1 2 3}]}> (~(has ju j) 'b' 5)%.y> (~(has ju j) 'b' 10)%.n> (~(has ju j) 'c' 10)%.n
++put:ju
Add key-set pair
Produces jug a
with c
added to the set located at key b
. If b
isn't a key in a
, it will be added and a new set created containing c
.
Accepts
a
is a jug
.
b
is a noun, the type of the keys in a
.
c
is a noun, the type the sets in a
contain.
Produces
A jug
.
Source
++ put|* [b=* c=*]^+ a=+ d=(get b)(~(put by a) b (~(put in d) c))
Examples
> j{[p='b' q={5 6 4}] [p='a' q={1 2 3}]}> `(jug @t @ud)`(~(put ju j) 'c' 5){[p='b' q={5 6 4}] [p='a' q={1 2 3}] [p='c' q={5}]}> `(jug @t @ud)`(~(put ju j) 'a' 4){[p='b' q={5 6 4}] [p='a' q={1 2 3 4}]}> `(jug @t @ud)`(~(put ju j) 'a' 1){[p='b' q={5 6 4}] [p='a' q={1 2 3}]}