2title = "Nock . ('dot')"
5aliases = ["docs/reference/hoon-expressions/rune/dot/"]
8Anything Nock can do, Hoon can do also. These runes are used for carrying out Nock operations in Hoon.
14`[%dtkt p=spec q=hoon]`: load from the Arvo namespace with a fake Nock instruction: 'Nock `12`''.
18The noun `q`, cast to the type `p`.
22Nock has no `12` instruction! But the virtual Nock
23used to run userspace code does. Nock `12` loads from a
24typed immutable namespace defined by its virtual context.
26Ordinarily a Hoon expression has access to no information but whatever can be found in the subject. The one exception is with the `.^` rune. It essentially allows you to request information from one of the Arvo vanes (modules).
28`.^` checks that the type of the value retrieved from Arvo nests under `p`. `q` is a `path` which includes information about which vane is being queried, and what sort of information is requested.
30In principle `.^` takes two subexpressions, but in practice `q` is often given in two parts: the first part includes the vane to be queried (e.g., `%a` for Ames, `%b` for Behn, `%c` for Clay, etc.) and the kind of request. The second part is a path that corresponds to the kind of request.
34In the dojo we can ask Clay -- the Arvo filesystem -- for a listing of the files at our current path, `%`:
55The `%c` is for Clay, and the `y` is for the request type. `arch` is the type of the listing. See `gen/cat.hoon` to see how this information is printed more prettily.
57The `%` is for the current path in the dojo:
61/~zod/base/~2018.9.20..23.05.35..0231
64You can modify the time of the file listing quite simply and ask for a listing from 5 hours ago. (Remember that Clay is a revision-controlled file system.)
67> .^(arch %cy /(scot %p our)/base/(scot %da (sub now ~h5)))
85`our` is the value for your ship's name.
89`[%dtls p=hoon]`: increment an atom with Nock `4`.
93`p` plus `1` if `p` is an atom; otherwise, crashes. The product atom has no aura.
99Irregular: `+(6)` is `.+(6)`.
119`[%dttr p=hoon q=hoon]`: evaluate with Nock `2`.
123Nock of formula `q` and subject `p`, with type `%noun`.
131`.*(p q)` is used to run Nock formula `q` on the subject `p` from within Hoon.
133Keep in mind that `p` and `q` can be arbitrary Hoon expressions, as long as they evaluate to the appropriate nouns for Nock evaluation.
135Note also that `.*` ("dottar") can be used to bypass the type system. It's
136therefore possible to use Hoon as a typeless language.
147> .*(|.(50) [9 2 0 1])
150> .*(12 [7 [`1 [4 `1]] [`2 `3 `2]])
153> .*(~ [5 1^4 [4 1^3]])
156> .*(~ [5 1^5 [4 1^3]])
160### `.=` "dottis" {#dottis}
162`[%dtts p=hoon q=hoon]`: test for equality with Nock `5`.
166`%.y` if `p` equals `q`; otherwise `%.n`.
172Irregular: `=(a b)` is `.=(a b)`.
176The test for equality includes a type check. Either the type of `p` must nest under the type of `q`, or _vice versa_. Otherwise the result is a crash.
178Like Nock equality, `.=` ("dottis") tests whether two nouns are the same,
179ignoring invisible pointer structure. Because in a conventional
180noun implementation each noun has a lazy short hash, comparisons
181are fast unless the hash needs to be computed, or we are comparing
182separate copies of identical nouns. (Comparing large duplicates
183is a common cause of performance bugs.)
206`[%dtwt p=hoon]`: test for cell or atom with Nock `3`.
210`%.y` if `p` is a cell; otherwise `%.n`.
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list