@@ -228,16 +228,16 @@ An atom.
231−Produces an atom by taking the last `b` blocks of size `a` from `c`.
231+Produces an atom by taking the last `step` blocks of size `bloq` from `b`.
233#### Accepts
233#### Accepts
235+`a` is an atom slice specifier (see [`++bite`](@/docs/hoon/reference/stdlib/1c.md#bite)),
235−`a` is a block size (see [`++bloq`](@/docs/hoon/reference/stdlib/1c.md)).
236+which is a block size (see [`++bloq`](@/docs/hoon/reference/stdlib/1c.md#bloq))
237+with optional block count.
237`b` is an atom.
239`b` is an atom.
241#### Produces
241#### Produces
@@ -248,44 +248,48 @@ An atom.
251− |= [a=bloq b=@u c=@]
251+ |= [a=bite b=@]
252+ =/ [=bloq =step] ?^(a a [a *step])
252− (mod c (bex (mul (bex a) b)))
253+ (mod b (bex (mul (bex bloq) step)))
255#### Examples
256#### Examples
258− > (end 2 2 255)
259+ > (end [2 2] 255)
261− > (end 3 1 255)
265+ > (end 3 255)
264− > (end 3 1 256)
268+ > (end 3 256)
267 > `@ub`12 :: @ub is the binary aura
271 > `@ub`12 :: @ub is the binary aura
270− > `@ub`(end 0 3 12)
274+ > `@ub`(end [0 3] 12)
273− > (end 0 3 12)
277+ > (end [0 3] 12)
276− > `@ub`(end 1 3 12)
280+ > `@ub`(end [1 3] 12)
279− > (end 1 3 12)
283+ > (end [1 3] 12)
282 > `@ux`'abc' :: @ux is the hexademical aura
286 > `@ux`'abc' :: @ux is the hexademical aura
283 0x63.6261
287 0x63.6261
285− > `@ux`(end 3 2 'abc')
289+ > `@ux`(end [3 2] 'abc')
288− > `@t`(end 3 2 'abc') :: @t is the cord aura
292+ > `@t`(end [3 2] 'abc') :: @t is the cord aura
@@ -347,16 +351,16 @@ An atom.
348Left-shift
352Left-shift
350−Produces an atom by left-shifting `c` by `b` blocks of size `a`.
354+Produces an atom by left-shifting `b` by `step` blocks of size `bloq`.
352#### Accepts
356#### Accepts
358+`a` is an atom slice specifier (see [`++bite`](@/docs/hoon/reference/stdlib/1c.md#bite)),
354−`a` is a block size (see [`++bloq`](@/docs/hoon/reference/stdlib/1c.md)).
359+which is a block size (see [`++bloq`](@/docs/hoon/reference/stdlib/1c.md#bloq))
360+with optional block count.
356`b` is an atom.
362`b` is an atom.
360#### Produces
364#### Produces
@@ -366,8 +370,9 @@ An atom.
369− |= [a=bloq b=@u c=@]
373+ |= [a=bite b=@]
374+ =/ [=bloq =step] ?^(a a [a *step])
370− (mul (bex (mul (bex a) b)) c)
375+ (mul b (bex (mul (bex bloq) step)))
373#### Examples
378#### Examples
@@ -376,19 +381,22 @@ An atom.
376 > `@ub`1 :: @ub is the binary aura
381 > `@ub`1 :: @ub is the binary aura
379− > `@ub`(lsh 0 1 1)
384+ > `@ub`(lsh [0 1] 1)
382− > (lsh 0 1 1)
387+ > (lsh [0 1] 1)
385 > `@ub`255
393 > `@ub`255
386 0b1111.1111
394 0b1111.1111
388− > `@ub`(lsh 3 1 255)
396+ > `@ub`(lsh [3 1] 255)
389 0b1111.1111.0000.0000
397 0b1111.1111.0000.0000
391− > (lsh 3 1 255)
399+ > (lsh [3 1] 255)
@@ -509,7 +517,9 @@ Produces an atom by assembling a list of atoms `b` using block size `a`.
510#### Accepts
518#### Accepts
520+`a` is an atom slice specifier (see [`$bite`](@/docs/hoon/reference/stdlib/1c.md#bite)),
512−`a` is a block size (see [`++bloq`](@/docs/hoon/reference/stdlib/1c.md)).
521+which is a block size (see [`$bloq`](@/docs/hoon/reference/stdlib/1c.md#bloq))
522+with optional block count.
514`b` is a list of atoms.
524`b` is a list of atoms.
@@ -522,12 +532,13 @@ An atom.
525− |= [a=bloq b=(list @)]
535+ |= [a=bite b=(list @)]
536+ =/ [=bloq =step] ?^(a a [a *step])
530− (add (lsh a c (end a 1 i.b)) $(c +(c), b t.b))
540+ %+ add $(i +(i), b t.b)
541+ (lsh [bloq (mul step i)] (end [bloq step] i.b))
533#### Examples
544#### Examples
@@ -548,8 +559,11 @@ An atom.
551− > (rep 0 [0 1 0 0 ~])
562+ > `@ub`(rep 0 [1 0 1 0 ~])
565+ > `@ub`(rep 0 [1 2 3 4 ~])
554 > (rep 0 [0 1 0 1 ~])
568 > (rep 0 [0 1 0 1 ~])
@@ -562,6 +576,12 @@ An atom.
563 > `@ub`(rep 3 [12 166 8 34 ~])
577 > `@ub`(rep 3 [12 166 8 34 ~])
564 0b10.0010.0000.1000.1010.0110.0000.1100
578 0b10.0010.0000.1000.1010.0110.0000.1100
583+ > `@t`(rep 3 "abcd") :: @t is the text aura
@@ -574,7 +594,9 @@ Produces a list of atoms from the bits of `b` using block size `a`.
575#### Accepts
595#### Accepts
597+`a` is an atom slice specifier (see [`$bite`](@/docs/hoon/reference/stdlib/1c.md#bite)),
577−`a` is a block size (see [`++bloq`](@/docs/hoon/reference/stdlib/1c.md)).
598+which is a block size (see [`$bloq`](@/docs/hoon/reference/stdlib/1c.md#bloq))
599+with optional block count.
579`b` is an atom.
601`b` is an atom.
@@ -587,10 +609,10 @@ A list of atoms.
590− |= [a=bloq b=@]
612+ |= [a=bite b=@]
591 ^- (list @)
613 ^- (list @)
592 ?: =(0 b) ~
614 ?: =(0 b) ~
593− [(end a 1 b) $(b (rsh a 1 b))]
615+ [(end a b) $(b (rsh a b))]
596#### Examples
618#### Examples
@@ -622,6 +644,9 @@ A list of atoms.
623 > (rip 3 256)
645 > (rip 3 256)
648+ > `tape`(rip 3 'abcd')
@@ -630,16 +655,16 @@ A list of atoms.
631Right-shift
656Right-shift
633−Right-shifts `c` by `b` blocks of size `a`, producing an atom.
658+Right-shifts `b` by `step` blocks of size `bloq`, producing an atom.
635#### Accepts
660#### Accepts
662+`a` is an atom slice specifier (see [`$bite`](@/docs/hoon/reference/stdlib/1c.md#bite)),
637−`a` is a block size (see [`++bloq`](@/docs/hoon/reference/stdlib/1c.md)).
663+which is a block size (see [`$bloq`](@/docs/hoon/reference/stdlib/1c.md#bloq))
664+with optional block count.
639`b` is an atom.
666`b` is an atom.
643#### Produces
668#### Produces
@@ -649,8 +674,9 @@ An atom.
652− |= [a=bloq b=@u c=@]
677+ |= [a=bite b=@]
678+ =/ [=bloq =step] ?^(a a [a *step])
653− (div c (bex (mul (bex a) b)))
679+ (div b (bex (mul (bex bloq) step)))
656#### Examples
682#### Examples
@@ -659,38 +685,125 @@ An atom.
659 > `@ub`145 :: @ub is the binary aura
685 > `@ub`145 :: @ub is the binary aura
660 0b1001.0001
686 0b1001.0001
662− > `@ub`(rsh 1 1 145)
688+ > `@ub`(rsh [1 1] 145)
663 0b10.0100
689 0b10.0100
665− > (rsh 1 1 145)
691+ > (rsh [1 1] 145)
668− > `@ub`(rsh 2 1 145)
697+ > `@ub`(rsh [2 1] 145)
671− > (rsh 2 1 145)
700+ > (rsh [2 1] 145)
674 > `@ub`10
703 > `@ub`10
677− > `@ub`(rsh 0 1 10)
706+ > `@ub`(rsh [0 1] 10)
680− > (rsh 0 1 10)
709+ > (rsh [0 1] 10)
683 > `@ux`'abc'
712 > `@ux`'abc'
684 0x63.6261
713 0x63.6261
686− > `@t`(rsh 3 1 'abc')
715+ > `@t`(rsh [3 1] 'abc')
689− > `@ux`(rsh 3 1 'abc')
718+ > `@ux`(rsh [3 1] 'abc')
728+Disassembles atom `b` into slices specified by `a`, applies `c` to each slice,
729+and reassembles the results back into an atom.
733+`a` is an atom slice specifier (see [`$bite`](@/docs/hoon/reference/stdlib/1c.md#bite)),
734+which is a block size (see [`$bloq`](@/docs/hoon/reference/stdlib/1c.md#bloq))
735+with optional block count.
739+`c` is a gate that accepts an atom and produces an atom.
750+ |= [a=bite b=@ c=$-(@ @)]
751+ (rep a (turn (rip a b) c))
757+ > `@ux`65.535 :: @ux is the hexadecimal aura
760+ > `@ux`(run 2 65.535 dec) :: dec is the decrement gate
770+Disassembles atom `b` into slices specified by `a`, applies `c` to each slice,
771+and assembles the results back into a.
775+`a` is an atom slice specifier (see [`$bite`](@/docs/hoon/reference/stdlib/1c.md#bite)),
776+which is a block size (see [`$bloq`](@/docs/hoon/reference/stdlib/1c.md#bloq))
777+with optional block count.
781+`c` is a gate that accepts an atom.
792+ |* [a=bite b=@ c=$-(@ *)]
799+ > `@ux`65.535 :: @ux is the hexadecimal aura
802+ > `(list @ux)`(rut 2 65.535 dec) :: dec is the decrement gate
695### `++swp`
808### `++swp`
@@ -1248,4 +1361,4 @@ An atom.