mirror of
https://github.com/urbit/shrub.git
synced 2024-12-24 20:47:27 +03:00
56 lines
1.2 KiB
Plaintext
56 lines
1.2 KiB
Plaintext
|
|%
|
||
|
++ mip :: map of maps
|
||
|
|$ [kex key value]
|
||
|
(map kex (map key value))
|
||
|
::
|
||
|
++ bi :: mip engine
|
||
|
=| a=(map * (map))
|
||
|
|@
|
||
|
++ del
|
||
|
|* [b=* c=*]
|
||
|
=+ d=(~(gut by a) b ~)
|
||
|
=+ e=(~(del by d) c)
|
||
|
?~ e
|
||
|
(~(del by a) b)
|
||
|
(~(put by a) b e)
|
||
|
::
|
||
|
++ get
|
||
|
|* [b=* c=*]
|
||
|
=> .(b `_?>(?=(^ a) p.n.a)`b, c `_?>(?=(^ a) ?>(?=(^ q.n.a) p.n.q.n.a))`c)
|
||
|
^- (unit _?>(?=(^ a) ?>(?=(^ q.n.a) q.n.q.n.a)))
|
||
|
(~(get by (~(gut by a) b ~)) c)
|
||
|
::
|
||
|
++ got
|
||
|
|* [b=* c=*]
|
||
|
(need (get b c))
|
||
|
::
|
||
|
++ gut
|
||
|
|* [b=* c=* d=*]
|
||
|
(~(gut by (~(gut by a) b ~)) c d)
|
||
|
::
|
||
|
++ has
|
||
|
|* [b=* c=*]
|
||
|
!=(~ (get b c))
|
||
|
::
|
||
|
++ key
|
||
|
|* b=*
|
||
|
~(key by (~(gut by a) b ~))
|
||
|
::
|
||
|
++ put
|
||
|
|* [b=* c=* d=*]
|
||
|
%+ ~(put by a) b
|
||
|
%. [c d]
|
||
|
%~ put by
|
||
|
(~(gut by a) b ~)
|
||
|
::
|
||
|
++ tap
|
||
|
::NOTE naive turn-based implementation find-errors ):
|
||
|
=< $
|
||
|
=+ b=`_?>(?=(^ a) *(list [x=_p.n.a _?>(?=(^ q.n.a) [y=p v=q]:n.q.n.a)]))`~
|
||
|
|. ^+ b
|
||
|
?~ a
|
||
|
b
|
||
|
$(a r.a, b (welp (turn ~(tap by q.n.a) (lead p.n.a)) $(a l.a)))
|
||
|
--
|
||
|
--
|