mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-25 16:05:27 +03:00
222 lines
5.4 KiB
Markdown
222 lines
5.4 KiB
Markdown
section 2dC, queues
|
|
===================
|
|
|
|
### `++to`
|
|
|
|
Queue engine
|
|
|
|
++ to :: queue engine
|
|
|/ a=(qeu)
|
|
|
|
Container arm for queue operation arms. The contained arms inherit its
|
|
[sample]() `++qeu` `a`.
|
|
|
|
`a` is a queue, [++qeu]().
|
|
|
|
### `+-bal:to`
|
|
|
|
Balance
|
|
|
|
+- bal
|
|
|- ^+ a
|
|
?~ a ~
|
|
?. |(?=(~ l.a) (vor n.a n.l.a))
|
|
$(a [n.l.a l.l.a $(a [n.a r.l.a r.a])])
|
|
?. |(?=(~ r.a) (vor n.a n.r.a))
|
|
$(a [n.r.a $(a [n.a l.a l.r.a]) r.r.a])
|
|
a
|
|
::
|
|
|
|
Vertically rebalances queue `a`.
|
|
|
|
`a` is a [queue]().
|
|
|
|
~zod/try=> `(qeu tape)`["a" ~ "b" ~ "c" ~ "d" ~ "e" ~ "f" ~ "g" ~ ~]
|
|
{"a" "b" "c" "d" "e" "f" "g"}
|
|
~zod/try=> `*`["a" ~ "b" ~ "c" ~ "d" ~ "e" ~ "f" ~ "g" ~ ~]
|
|
[[97 0] 0 [98 0] 0 [99 0] 0 [100 0] 0 [101 0] 0 [102 0] 0 [103 0] 0 0]
|
|
~zod/try=> ~(bal to `(qeu tape)`["a" ~ "b" ~ "c" ~ "d" ~ "e" ~ "f" ~ "g" ~ ~])
|
|
{"a" "b" "c" "d" "e" "f" "g"}
|
|
~zod/try=> `*`~(bal to `(qeu tape)`["a" ~ "b" ~ "c" ~ "d" ~ "e" ~ "f" ~ "g" ~ ~])
|
|
[[100 0] [[99 0] [[98 0] [[97 0] 0 0] 0] 0] [101 0] 0 [102 0] 0 [103 0] 0 0]
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `+-dep:to`
|
|
|
|
Maximum Depth
|
|
|
|
+- dep :: max depth of queue
|
|
|- ^- @
|
|
?~ a 0
|
|
+((max $(a l.a) $(a r.a)))
|
|
::
|
|
|
|
Produces the maximum depth of leaves (r.a and l.a) in queue `a`.
|
|
|
|
`a` is a [queue]().
|
|
|
|
~zod/try=> =a (~(gas to `(qeu ,@)`~) `(list ,@)`[1 2 3 4 5 6 7 ~])
|
|
~zod/try=> ~(dep to a)
|
|
4
|
|
~zod/try=> =a (~(gas to `(qeu ,@)`~) `(list ,@)`[1 2 3 4 ~])
|
|
~zod/try=> ~(dep to a)
|
|
3
|
|
~zod/try=> =a (~(gas to `(qeu ,@)`~) `(list ,@)`[1 2 ~])
|
|
~zod/try=> ~(dep to a)
|
|
2
|
|
~zod/try=> ~(dep to `(qeu tape)`["a" ~ "b" ~ "c" ~ "d" ~ "e" ~ "f" ~ "g" ~ ~])
|
|
7
|
|
~zod/try=> ~(dep to ~(bal to `(qeu tape)`["a" ~ "b" ~ "c" ~ "d" ~ "e" ~ "f" ~ "g" ~ ~]))
|
|
4
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `+-gas`
|
|
|
|
Push list
|
|
|
|
+- gas :: insert list to queue
|
|
|= b=(list ,_?>(?=(^ a) n.a))
|
|
|- ^+ a
|
|
?~(b a $(b t.b, a (put(+< a) i.b)))
|
|
::
|
|
|
|
Push all elements of list `b` into the queue.
|
|
|
|
`a` is a [queue]().
|
|
|
|
`b` is a list.
|
|
|
|
~zod/try=> (~(gas to `(qeu ,@)`~) `(list ,@)`[1 2 3 ~])
|
|
{3 2 1}
|
|
~zod/try=> =a (~(gas to `(qeu ,@)`~) `(list ,@)`[1 2 3 ~])
|
|
~zod/try=> =b `(list ,@)`[4 5 6 ~]
|
|
~zod/try=> (~(gas to a) b)
|
|
{6 5 4 3 2 1}
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `+-get:to`
|
|
|
|
Pop
|
|
|
|
+- get :: head-tail pair
|
|
|- ^+ [p=?>(?=(^ a) n.a) q=a]
|
|
?~ a
|
|
!!
|
|
?~ r.a
|
|
[n.a l.a]
|
|
=+ b=$(a r.a)
|
|
:- p.b
|
|
?: |(?=(~ q.b) (vor n.a n.q.b))
|
|
[n.a l.a q.b]
|
|
[n.q.b [n.a l.a l.q.b] r.q.b]
|
|
::
|
|
|
|
Produces the head and tail queue of `a`.
|
|
|
|
`a` is a [queue]().
|
|
|
|
~zod/try=> =s (~(gas to *(qeu ,@)) `(list ,@)`~[1 2 3])
|
|
~zod/try=> ~(get to s)
|
|
[p=1 q={3 2}]
|
|
~zod/try=> ~(get to ~)
|
|
! exit
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `+-nap:to`
|
|
|
|
Remove last in
|
|
|
|
+- nap :: removes head
|
|
?> ?=(^ a)
|
|
?: =(~ l.a) r.a
|
|
=+ b=get(+< l.a)
|
|
bal(+< ^+(a [p.b q.b r.a]))
|
|
::
|
|
|
|
Removes the head of queue `a`, producing the resulting queue.
|
|
|
|
`a` is a [queue]().
|
|
|
|
~zod/try=> =a (~(gas to `(qeu ,@)`~) `(list ,@)`[1 2 3 4 5 6 ~])
|
|
~zod/try=> -.a
|
|
n=6
|
|
~zod/try=> =b ~(nap to a)
|
|
~zod/try=> -.b
|
|
n=2
|
|
~zod/try=> b
|
|
{5 4 3 2 1}
|
|
~zod/try=> a
|
|
{6 5 4 3 2 1}
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `+-put:to`
|
|
|
|
Insert
|
|
|
|
+- put :: insert new tail
|
|
|* b=*
|
|
|- ^+ a
|
|
?~ a
|
|
[b ~ ~]
|
|
bal(+< a(l $(a l.a)))
|
|
::
|
|
|
|
Accept any noun `b` and adds to queue `a` as the head, producing the
|
|
resulting queue.
|
|
|
|
`a` is a [queue]().
|
|
|
|
`b` is any noun.
|
|
|
|
~zod/try=> (~(gas to `(qeu ,@)`~) `(list ,@)`[3 1 2 4 5 6 ~])
|
|
~zod/try=> (~(put to a) 7)
|
|
{7 6 5 4 2 1 3}
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `+-tap:to`
|
|
|
|
Queue to list
|
|
|
|
+- tap :: queue to list
|
|
|= b=(list ,_?>(?=(^ a) n.a))
|
|
^+ b
|
|
?~ a
|
|
b
|
|
$(a r.a, b [n.a $(a l.a)])
|
|
::
|
|
|
|
Produces queue `a` as a list from front to back.
|
|
|
|
`a` is a [queue]().
|
|
|
|
~zod/try=> =a (~(gas to `(qeu ,@)`~) `(list ,@)`[3 1 2 4 5 6 ~])
|
|
~zod/try=> `*`a
|
|
[6 0 2 [4 [5 0 0] 0] 1 0 3 0 0]
|
|
~zod/try=> (~(tap to a) `(list ,@)`[99 100 101 ~])
|
|
~[3 1 2 4 5 6 99 100 101]
|
|
|
|
------------------------------------------------------------------------
|
|
|
|
### `+-top:to`
|
|
|
|
+- top :: produces head
|
|
|- ^- (unit ,_?>(?=(^ a) n.a))
|
|
?~ a ~
|
|
?~(r.a [~ n.a] $(a r.a))
|
|
|
|
Produces the head of queue `a` as a unit (an empty queue has no head).
|
|
|
|
`a` is a [queue]().
|
|
|
|
~zod/try=> =a (~(gas to `(qeu ,@)`~) `(list ,@)`[1 2 3 4 5 6 ~])
|
|
~zod/try=> ~(top to a)
|
|
[~ 1]
|
|
|
|
------------------------------------------------------------------------
|