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']