++at
Basic printing
Container core for basic atom printing functions.
Note that these are largely deprecated, using outdated syntax, character mappings and encodings, and should generally not be used.
Accepts
a
is a @
.
Source
++ at|_ a=@
++r:at
Print term, number or hex
If a
is composed of the letters a
through z
and -
, print as @tas
syntax. If a
is an atom of two bytes or less, print as an integer with comma-separated thousands. Otherwise, print a
as @ux
syntax.
Accepts
a
is a @
, and is the sample of ++at
.
Produces
A tape
.
Source
++ r?: ?& (gte (met 3 a) 2)|-?: =(0 a)&=+ vis=(end 3 a)?& ?|(=('-' vis) ?&((gte vis 'a') (lte vis 'z')))$(a (rsh 3 a))====rtam?: (lte (met 3 a) 2)rudrux
Examples
> ~(r at 'foo-bar')"%foo-bar"
> ~(r at 0xbeef)"48,879"
> ~(r at 0xdead.beef)"0xdead-beef"
++rf:at
Print loobean
If a
is a loobean, print as |
/&
, otherwise crash.
Accepts
a
is a @
, and is the sample of ++at
.
Produces
A tape
.
Source
++ rf `tape`[?-(a %& '&', %| '|', * !!) ~]
Examples
> ~(rf at %.y)"&"
> ~(rf at %.n)"|"
> ~(rf at 'foo')dojo: hoon expression failed
++rn:at
Print null
If a
is null, print ~
, otherwise crash.
Accepts
a
is a @
, and is the sample of ++at
.
Produces
A tape
.
Source
++ rn `tape`[?>(=(0 a) '~') ~]
Examples
> ~(rn at ~)"~"
> ~(rn at 'foo')dojo: hoon expression failed
++rt:at
Print cord, including escape characters
Print a
with cord
syntax, including escape characters.
Accepts
a
is a @
, and the sample of ++at
.
Produces
A tape
.
Source
++ rt `tape`['\'' (weld (mesc (trip a)) `tape`['\'' ~])]
Examples
> ~(rt at 'foo')"'foo'"
> ~(rt at 'fo\\o')"'fo\\\\o'"
> ~(rt at 'fo\'o')"'fo\\0x27/o'"
++rta:at
Same as ++rt:at
Source
++ rta rt
++rtam:at
Print cord with @tas
syntax
Treat a
as cord
, print it with %
prefix.
Accepts
a
is a @
, and is the sample of ++at
.
Produces
A tape
.
Source
++ rtam `tape`['%' (trip a)]
Examples
> ~(rtam at 'foo')"%foo"
> ~(rtam at '12')"%12"
> ~(rtam at '!!!')"%!!!"
++rub:at
Print binary
Print a
as @ub
syntax, except with -
separators rather than .
separators.
Accepts
a
is a @
, and is the sample of ++at
.
Produces
A tape
.
Source
++ rub `tape`['0' 'b' (rum 2 ~ |=(b=@ (add '0' b)))]
Examples
> ~(rub at 0xbeef)"0b1011-1110-1110-1111"
++rud:at
Print atom as integer
Print atom a
as an integer, with commas separating thousands.
Accepts
a
is a @
.
Produces
A tape
.
Source
++ rud (rum 10 ~ |=(b=@ (add '0' b)))
Examples
> ~(rud at 0xbeef)"48,879"
++rum:at
Print base-n
Print a
as base b
with suffix c
and using gate d
to convert blocks to characters. Each set of four characters will be separated by -
, except for base 10 which will be printed with commas separating thousands.
Accepts
a
is a@
, and is the sample of++at
b
is a@
, denoting the the base.c
is atape
, and will be appended to the end of the result.d
is agate
that takes@
and produces@
.
Produces
A tape
.
Source
++ rum|= [b=@ c=tape d=$-(@ @)]^- tape?: =(0 a)[(d 0) c]=+ e=0|- ^- tape?: =(0 a)c=+ f=&(!=(0 e) =(0 (mod e ?:(=(10 b) 3 4))))%= $a (div a b)c [(d (mod a b)) ?:(f [?:(=(10 b) ',' '-') c] c)]e +(e)==
Examples
> (~(rum at 0xdead.beef) 10 ~ |=(b=@ (add '0' b)))"3,735,928,559"
> (~(rum at 0xdead.beef) 10 " m/s" |=(b=@ (add '0' b)))"3,735,928,559 m/s"
> (~(rum at 0xdead.beef) 2 ~ |=(b=@ (add '0' b)))"1101-1110-1010-1101-1011-1110-1110-1111"
++rup:at
Print @p
(outdated)
Print a
as an @p
, but with outdated syntax and number<->syllable mapping. This function almost certainly should not be used.
Accepts
a
is a @
.
Produces
A tape
.
Source
++ rup=+ b=(met 3 a)^- tape:- '-'|- ^- tape?: (gth (met 5 a) 1)%+ weld$(a (rsh 5 a), b (sub b 4))`tape`['-' '-' $(a (end 5 a), b 4)]?: =(0 b)['~' ~]?: (lte b 1)(trip (tos:po a))|- ^- tape?: =(2 b)=+ c=(rsh 3 a)=+ d=(end 3 a)(weld (trip (tod:po c)) (trip (tos:po (mix c d))))=+ c=(rsh [3 2] a)=+ d=(end [3 2] a)(weld ^$(a c, b (met 3 c)) `tape`['-' $(a (mix c d), b 2)])
Examples
> ~(rup at 0xdead.beef)"-rylsal-sellac"
> ~(rup at ~sampel-palnet)"-sellod-lebdiv"
> ~(rup at ~zod)"-~"
++ruv:at
Print base-64
Print a
as outdated base-64 syntax, with 0v
rather than 0w
prefix, different character mappings and separators.
Accepts
a
is a @
, and is the sample of ++at
.
Produces
A tape
.
Source
++ ruv^- tape:+ '0''v'%^ rum64~|= b=@?: =(63 b)'+'?: =(62 b)'-'?:((lth b 26) (add 65 b) ?:((lth b 52) (add 71 b) (sub b 4)))
Examples
> ~(ruv at 0xdead.beef)"0vDe-rb7v"
Note this is how it should be rendered:
> `@uw`0xdead.beef0w3.uHrXL
++rux:at
Print hexadecimal
Print a
as @ux
except with -
separators rather than .
s.
Accepts
a
is a @
, and is the sample of ++at
.
Produces
A tape
.
Source
++ rux `tape`['0' 'x' (rum 16 ~ |=(b=@ (add b ?:((lth b 10) 48 87))))]
Examples
> ~(rux at 0xdead.beef)"0xdead-beef"
++cass
To lowercase
Turn all occurences of uppercase letters in any tape
into lowercase letters. Returns a tape
.
Accepts
vib
is a tape
.
Produces
A tape
.
Source
++ cass|= vib=tape^- tape(turn vib |=(a=@ ?.(&((gte a 'A') (lte a 'Z')) a (add 32 a))))
Examples
> (cass "JOHN DOE")"john doe"> (cass "abc ABC 123 !@#")"abc abc 123 !@#"> (cass "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsQqRrVvWwXxYyZz")"aabbccddeeffgghhiijjkkllmmnnooppqqrrssqqrrvvwwxxyyzz"
++crip
Tape to cord
Produce a cord
from a tape
.
Accepts
a
is a tape
.
Produces
A cord
.
Source
++ crip |=(a=tape `@t`(rap 3 a))
Examples
> (crip "john doe")'john doe'> (crip "abc 123 !@#")'abc 123 !@#'> `@ud`(crip "abc")6.513.249
++cuss
To uppercase
Turn all occurences of lowercase letters in any tape
into uppercase letters. Returns a tape
.
Accepts
vib
is a tape
.
Produces
A tape
.
Source
++ cuss|= vib=tape^- tape(turn vib |=(a=@ ?.(&((gte a 'a') (lte a 'z')) a (sub a 32))))
Examples
> (cuss "john doe")"JOHN DOE"> (cuss "abc ABC 123 !@#")"ABC ABC 123 !@#"> (cuss "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsQqRrVvWwXxYyZz")"AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSQQRRVVWWXXYYZZ"
++mesc
Escape special chars
Escape special characters.
Accepts
vib
is a tape
.
Produces
A tape
.
Source
++ mesc|= vib=tape^- tape?~ vib~?: =('\\' i.vib)['\\' '\\' $(vib t.vib)]?: ?|((gth i.vib 126) (lth i.vib 32) =(`@`39 i.vib))['\\' (welp ~(rux at i.vib) '/' $(vib t.vib))][i.vib $(vib t.vib)]
Examples
> (mesc "ham lus")"ham lus"> (mesc "bas\\hur")"bas\\\\hur"> (mesc "as'saß")"as\0x27/sa\0xc3/\0x9f/"
++runt
Prepend n
times
Add a
repetitions of character b
to the head of tape
c
.
Accepts
[a b]
are atoms.
c
is a tape
.
Produces
A tape
.
Source
++ runt|= [[a=@ b=@] c=tape]^- tape?: =(0 a)c[b $(a (dec a))]
Examples
> (runt [2 '/'] "ham")"//ham"> (runt [10 'a'] "")"aaaaaaaaaa"
++sand
Soft-cast by aura
Check characters in b
are valid for aura a
. Produce a unit
of a
if valid and a null unit
if not. Takes a
and produces a gate that takes b
.
Accepts
a
is a @ta
, and specifies the aura like %tas
or %ta
.
b
is an atom.
Produces
A (unit @)
.
Source
++ sand|= a=@ta(flit (sane a))
Examples
> `(unit @ta)`((sand %ta) 'sym-som')[~ ~.sym-som]
> `(unit @ta)`((sand %ta) 'err!')~
++sane
Check aura validity
Check validity of a
by aura b
. Takes b
and produces a gate that takes a
.
Accepts
a
is a @ta
, and specifies the aura like %tas
or %ta
.
b
is an atom.
Produces
A ?
.
Source
++ sane|= a=@ta|= b=@ ^- ??. =(%t (end 3 a)):: XX more and better sanity::&=+ [inx=0 len=(met 3 b)]?: =(%tas a)|- ^- ??: =(inx len) &=+ cur=(cut 3 [inx 1] b)?& ?| &((gte cur 'a') (lte cur 'z'))&(=('-' cur) !=(0 inx) !=(len inx))&(&((gte cur '0') (lte cur '9')) !=(0 inx))==$(inx +(inx))==?: =(%ta a)|- ^- ??: =(inx len) &=+ cur=(cut 3 [inx 1] b)?& ?| &((gte cur 'a') (lte cur 'z'))&((gte cur '0') (lte cur '9'))|(=('-' cur) =('~' cur) =('_' cur) =('.' cur))==$(inx +(inx))==|- ^- ??: =(0 b) &=+ cur=(end 3 b)?: &((lth cur 32) !=(10 cur)) |=+ len=(teff cur)?& |(=(1 len) =+(i=1 |-(|(=(i len) &((gte (cut 3 [i 1] b) 128) $(i +(i)))))))$(b (rsh [3 len] b))==
Examples
> ((sane %tas) %mol)%.y> ((sane %tas) 'lam')%.y> ((sane %tas) 'more ace')%.n
++taft
UTF8 to UTF32
Convert cord
a
to a UTF32 @c
.
Accepts
a
is a @t
.
Produces
A @c
.
Source
++ taft|= a=@t^- @c%+ rap 5|- ^- (list @c)=+ b=(teff a)?: =(0 b) ~=+ ^= c%+ can 0%+ turn^- (list [p=@ q=@])?+ b !!%1 [[0 7] ~]%2 [[8 6] [0 5] ~]%3 [[16 6] [8 6] [0 4] ~]%4 [[24 6] [16 6] [8 6] [0 3] ~]==|=([p=@ q=@] [q (cut 0 [p q] a)])?> =((tuft c) (end [3 b] a))[c $(a (rsh [3 b] a))]
Examples
> (taft 'foobar')~-foobar> `@ux`'foobar'0x7261.626f.6f66> `@ux`~-foobar0x72.0000.0061.0000.0062.0000.006f.0000.006f.0000.0066
++teff
UTF8 Length
Produces the number of utf8 bytes of a
, a single @t
character. If a
contains more than one character, it will produce the byte-length of the first one.
Accepts
a
is a @t
.
Produces
An atom.
Source
++ teff|= a=@t ^- @=+ b=(end 3 a)?: =(0 b)?>(=(`@`0 a) 0)?> |((gte b 32) =(10 b))?:((lte b 127) 1 ?:((lte b 223) 2 ?:((lte b 239) 3 4)))
Examples
> (teff 'a')1> (teff 'ß')2> (teff 'aß')1
++trim
Tape split
Split first a
characters off tape
b
.
Accepts
a
is an atom.
b
is a tape
.
Produces
A cell of tape
s, p
and q
.
Source
++ trim|= [a=@ b=tape]^- [p=tape q=tape]?~ b[~ ~]?: =(0 a)[~ b]=+ c=$(a (dec a), b t.b)[[i.b p.c] q.c]
Examples
> (trim 5 "lasok termun")[p="lasok" q=" termun"]> (trim 5 "zam")[p="zam" q=""]
++trip
Cord to tape
Produce a tape
from cord
a
.
Accepts
a
is an atom.
Produces
A tape
.
Source
++ trip~/ %trip|= a=@ ^- tape?: =(0 (met 3 a))~[^-(@ta (end 3 a)) $(a (rsh 3 a))]
Examples
> (trip 'john doe')"john doe"> (trip 'abc 123 !@#')"abc 123 !@#"> (trip 'abc')"abc"
++tuba
UTF8 tape to UTF32 tape
Convert tape
to a list
of codepoints (@c
).
Accepts
a
is a tape
.
Produces
A (list @c)
.
Source
++ tuba|= a=tape^- (list @c)(rip 5 (taft (rap 3 a)))
Examples
> (tuba "я тут")~[~-~44f. ~-. ~-~442. ~-~443. ~-~442.]> (tuba "chars")~[~-c ~-h ~-a ~-r ~-s]
++tufa
UTF32 to UTF8 tape
Wrap a list
of utf32 codepoints into a utf8 tape
.
Accepts
a
is a (list @c)
.
Produces
A tape
.
Source
++ tufa|= a=(list @c)^- tape?~ a ""(weld (rip 3 (tuft i.a)) $(a t.a))
Examples
> (tufa ~[~-~44f. ~-. ~-~442. ~-~443. ~-~442.])"я тут"> (tufa ((list @c) ~[%a %b 0xb1 %c]))"ab±c"
++tuft
UTF32 to UTF8
Convert @c
to cord
.
Accepts
a
is a @c
.
Produces
A cord
.
Source
++ tuft|= a=@c^- @t%+ rap 3|- ^- (list @)?: =(`@`0 a)~=+ b=(end 5 a)=+ c=$(a (rsh 5 a))?: (lte b 0x7f)[b c]?: (lte b 0x7ff):* (mix 0b1100.0000 (cut 0 [6 5] b))(mix 0b1000.0000 (end [0 6] b))c==?: (lte b 0xffff):* (mix 0b1110.0000 (cut 0 [12 4] b))(mix 0b1000.0000 (cut 0 [6 6] b))(mix 0b1000.0000 (end [0 6] b))c==:* (mix 0b1111.0000 (cut 0 [18 3] b))(mix 0b1000.0000 (cut 0 [12 6] b))(mix 0b1000.0000 (cut 0 [6 6] b))(mix 0b1000.0000 (end [0 6] b))c==
Examples
> (tuft ~-foobar)'foobar'> `@ux`~-foobar0x72.0000.0061.0000.0062.0000.006f.0000.006f.0000.0066> `@ux`'foobar'0x7261.626f.6f66
++wack
Knot escape
Escape knot
~
as ~~
and _
as ~-
. Used for printing.
Accepts
a
is a knot
.
Produces
A knot
.
Source
++ wack|= a=@ta^- @ta=+ b=(rip 3 a)%+ rap 3|- ^- tape?~ b~?: =('~' i.b) ['~' '~' $(b t.b)]?: =('_' i.b) ['~' '-' $(b t.b)][i.b $(b t.b)]
Examples
> (wack '~20_sam~')~.~~20~-sam~~> `@t`(wack '~20_sam~')'~~20~-sam~~'
++wick
Knot unescape
Unescape knot
~~
as ~
and ~-
as _
. Produces a unit
, which is null if the knot
contains unescaped ~
characters.
Accepts
a
is a an atom.
Produces
A (unit @ta)
.
Source
++ wick|= a=@^- (unit @ta)=+ b=(rip 3 a)=- ?^(b ~ (some (rap 3 (flop c))))=| c=tape|- ^- [b=tape c=tape]?~ b [~ c]?. =('~' i.b)$(b t.b, c [i.b c])?~ t.b [b ~]?- i.t.b%'~' $(b t.t.b, c ['~' c])%'-' $(b t.t.b, c ['_' c])@ [b ~]==
Examples
> (wick ~.~~20~-sam~~)[~ ~.~20_sam~]> (wick ~.~20~-sam~~)~
++woad
Unescape cord
Unescape knot
-encoded cord
.
Accepts
a
is a @ta
.
Produces
A cord
.
Source
++ woad|= a=@ta^- @t%+ rap 3|- ^- (list @)?: =(`@`0 a)~=+ b=(end 3 a)=+ c=(rsh 3 a)?: =('.' b)[' ' $(a c)]?. =('~' b)[b $(a c)]=> .(b (end 3 c), c (rsh 3 c))?+ b =- (weld (rip 3 (tuft p.d)) $(a q.d))^= d=+ d=0|- ^- [p=@ q=@]?: =('.' b)[d c]?< =(0 c)%= $b (end 3 c)c (rsh 3 c)d %+ add (mul 16 d)%+ sub b?: &((gte b '0') (lte b '9')) 48?>(&((gte b 'a') (lte b 'z')) 87)==%'.' ['.' $(a c)]%'~' ['~' $(a c)]==
Examples
> (woad ~.foo.bar~21.)'foo bar!'
++wood
Escape cord
Escape cord
a
so it can be encoded in a knot
.
Accepts
a
is a cord
.
Produces
A knot
.
Source
++ wood|= a=@t^- @ta%+ rap 3|- ^- (list @)?: =(`@`0 a)~=+ b=(teff a)=+ c=(taft (end [3 b] a))=+ d=$(a (rsh [3 b] a))?: ?| &((gte c 'a') (lte c 'z'))&((gte c '0') (lte c '9'))=(`@`'-' c)==[c d]?+ c:- '~'=+ e=(met 2 c)|- ^- tape?: =(0 e)['.' d]=. e (dec e)=+ f=(rsh [2 e] c)[(add ?:((lte f 9) 48 87) f) $(c (end [2 e] c))]::%' ' ['.' d]%'.' ['~' '.' d]%'~' ['~' '~' d]==
Examples
> (wood 'foo bar!')~.foo.bar~21.