Crate nock

Source
Expand description

Implementation of the Nock virtual machine.

See http://urbit.org/docs/theory/whitepaper for more information on Nock.

The Nock spec:

A noun is an atom or a cell.
An atom is a natural number.
A cell is an ordered pair of nouns.

nock(a)          *a
[a b c]          [a [b c]]

?[a b]           0
?a               1
+[a b]           +[a b]
+a               1 + a
=[a a]           0
=[a b]           1
=a               =a

/[1 a]           a
/[2 a b]         a
/[3 a b]         b
/[(a + a) b]     /[2 /[a b]]
/[(a + a + 1) b] /[3 /[a b]]
/a               /a

*[a [b c] d]     [*[a b c] *[a d]]

*[a 0 b]         /[b a]
*[a 1 b]         b
*[a 2 b c]       *[*[a b] *[a c]]
*[a 3 b]         ?*[a b]
*[a 4 b]         +*[a b]
*[a 5 b]         =*[a b]

*[a 6 b c d]     *[a 2 [0 1] 2 [1 c d] [1 0] 2 [1 2 3] [1 0] 4 4 b]
*[a 7 b c]       *[a 2 b 1 c]
*[a 8 b c]       *[a 7 [[7 [0 1] b] 0 1] c]
*[a 9 b c]       *[a 7 c 2 [0 1] 0 b]
*[a 10 [b c] d]  *[a 8 c 7 [0 3] d]
*[a 10 b c]      *[a c]

*a               *a

Structs§

Enums§

  • A wrapper for referencing Noun-like patterns.

Traits§

  • Types that can be interpreted as arbitrary-length little-endian base-256 integers.
  • Types that can be constructed from base-256 integers.
  • A trait for types that can be instantiated from a Nock noun.
  • Interface for a virtual machine for Nock code.
  • Trait for types that can convert themselves to a noun.

Functions§

  • Evaluate nock /[axis subject]
  • Return the bit position of the most significant bit.

Type Aliases§