Cells

The : ("col") expressions are used to produce cells, which are pairs of values. E.g., :-(p q) produces the cell [p q]. All : runes reduce to :-.

Runes

:_ "colcab"

[%clcb p=hoon q=hoon]; construct a cell, inverted.

Expands to
:-(q p)
Syntax

Regular: 2-fixed.

Examples
~zod:dojo> :_(1 2)
[2 1]

"colcol"

Code comment

Syntax

:: any text you like!

Examples
::
::  this is commented code
::
|=  a=@         ::  a gate
(add 2 a)       ::  that adds 2
                ::  to the input

:- "colhep"

[%clhp p=hoon q=hoon]: construct a cell (2-tuple).

Produces

The cell of p and q.

Syntax

Regular: 2-fixed.

Irregular: [a b] is :-(a b).

Irregular: [a b c] is [a [b c]].

Irregular: a^b^c is [a b c].

Irregular: a/b is [%a b].

Irregular: `a is [~ a].

Irregular: ~[a b] is [a b ~].

Irregular: [a b c]~ is [[a b c] ~].

Discussion

Hoon expressions actually use the same "autocons" pattern as Nock formulas. If you're assembling expressions (which usually only the compiler does), [a b] is the same as :-(a b).

Examples
~zod:dojo> :-(1 2)
[1 2

~zod:dojo> 1^2
[1 2]

~zod:dojo> 1/2
[%1 2]

~zod:dojo> `1
[~ 1]

:^ "colket"

[%clkt p=hoon q=hoon r=hoon s=hoon]: construct a quadruple (4-tuple).

Expands to
:-(p :-(q :-(r s)))
Syntax

Regular: 4-fixed.

Examples
~zod:dojo> :^(1 2 3 4)
[1 2 3 4]

~zod:dojo> :^     5
                6
              7
            8
[5 6 7 8]

:+ "collus"

[%clls p=hoon q=hoon r=hoon]: construct a triple (3-tuple).

Expands to:
:-(p :-(q r))
Syntax

Regular: 3-fixed.

Examples
/~zod:dojo> :+  1
              2
            3
[1 2 3]

~zod:dojo> :+(%a ~ 'b')
[%a ~ 'b']

:~ "colsig"

[%clsg p=(list hoon)]: construct a null-terminated list.

Expands to

Pseudocode: a, b, c, ... as elements of p:

:-(a :-(b :-(c :-(... :-(z ~)))))
Desugaring
|-
?~  p
  ~
:-  i.p
$(p t.p)
Syntax

Regular: running.

Examples
~zod:dojo> :~(5 3 4 2 1)
[5 3 4 2 1 ~]

~zod:dojo> ~[5 3 4 2 1]
[5 3 4 2 1 ~]

~zod:dojo> :~  5
               3
               4
               2
               1
           ==
[5 3 4 2 1 ~]

:* "coltar"

[%cltr p=(list hoon)]: construct an n-tuple.

Expands to

Pseudocode: a, b, c, ... as elements of p:

:-(a :-(b :-(c :-(... z)))))
Desugaring
|-
?~  p
  !!
?~  t.p
  i.p
:-  i.p
$(p t.p)
Syntax

Regular: running.

Examples
~zod:dojo> :*(5 3 4 1 4 9 0 ~ 'a')
[5 3 4 1 4 9 0 ~ 'a']

~zod:dojo> [5 3 4 1 4 9 0 ~ 'a']
[5 3 4 1 4 9 0 ~ 'a']

~zod:dojo> :*  5
                3
                4
                1
                4
                9
                0
                ~
                'a'
            ==
[5 3 4 1 4 9 0 ~ 'a']