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 :-.
:- "colhep"
Construct a cell (2-tuple).
Syntax
Two arguments, fixed.
| Form | Syntax |
|---|---|
| Tall |
:- p q |
| Wide |
:-(p q) |
| Irregular #1 |
[p q] |
| Irregular #2 |
p^q |
AST
[%clhp p=hoon q=hoon]
Produces
The cell of p and q.
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
> :-(1 2)
[1 2]
~zod:dojo> 1^2
[1 2]:_ "colcab"
Construct a cell, inverted.
Syntax
Two arguments, fixed.
| Form | Syntax |
|---|---|
| Tall |
:_ p q |
| Wide |
:_(p q) |
| Irregular | None. |
AST
[%clcb p=hoon q=hoon]
Expands to
:-(q p)
Examples
> :_(1 2)
[2 1]:+ "collus"
Construct a triple (3-tuple).
Syntax
Three arguments, fixed.
| Form | Syntax |
|---|---|
| Tall |
:+ p q r |
| Wide |
:+(p q r) |
| Irregular |
[p q r] |
AST
[%clls p=hoon q=hoon r=hoon]
Expands to:
:-(p :-(q r))
Examples
> :+ 1
2
3
[1 2 3]
> :+(%a ~ 'b')
[%a ~ 'b']:^ "colket"
Construct a quadruple (4-tuple).
Syntax
Four arguments, fixed.
| Form | Syntax |
|---|---|
| Tall |
:^ p
q
r
s
|
| Wide |
:^(p q r s) |
| Irregular |
[p q r s] |
AST
[%clkt p=hoon q=hoon r=hoon s=hoon]
Expands to
:-(p :-(q :-(r s)))
Examples
> :^(1 2 3 4)
[1 2 3 4]
> :^ 5
6
7
8
[5 6 7 8]:* "coltar"
Construct an n-tuple.
Syntax
Variable number of arguments.
| Form | Syntax |
|---|---|
| Tall |
:* p1
p2
p3
pn
==
|
| Wide |
:*(p1 p2 p3 pn) |
| Irregular |
[p1 p2 p3 pn] |
AST
[%cltr p=(list hoon)]
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)
Examples
> :*(5 3 4 1 4 9 0 ~ 'a')
[5 3 4 1 4 9 0 ~ 'a']
> [5 3 4 1 4 9 0 ~ 'a']
[5 3 4 1 4 9 0 ~ 'a']
> :* 5
3
4
1
4
9
0
~
'a'
==
[5 3 4 1 4 9 0 ~ 'a']:~ "colsig"
Construct a null-terminated list.
Syntax
Variable number of arguments.
| Form | Syntax |
|---|---|
| Tall |
:~ p1
p2
p3
pn
==
|
| Wide |
:~(p1 p2 p3 pn) |
| Irregular |
~[p1 p2 p3 pn] |
AST
[%clsg p=(list hoon)]
Expands to
Pseudocode: a, b, c, ... as elements of p:
:-(a :-(b :-(c :-(... :-(z ~)))))
Desugaring
|-
?~ p
~
:- i.p
$(p t.p)
Discussion
Note that this does not produce a list type, it just produces a
null-terminated n-tuple. To make it a proper list it must be cast or molded.
Examples
> :~(5 3 4 2 1)
[5 3 4 2 1 ~]
> ~[5 3 4 2 1]
[5 3 4 2 1 ~]
> :~ 5
3
4
2
1
==
[5 3 4 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