mirror of
https://github.com/urbit/shrub.git
synced 2024-09-11 12:25:43 +03:00
44 lines
1019 B
Plaintext
44 lines
1019 B
Plaintext
1 Context
|
|
|
|
This spec defines one function, Nock.
|
|
|
|
2 Structures
|
|
|
|
A noun is an atom or a cell. An atom is any unsigned integer.
|
|
A cell is an ordered pair of any two nouns.
|
|
|
|
3 Pseudocode
|
|
|
|
Brackets enclose cells. [a b c] is [a [b c]].
|
|
|
|
*a is Nock(a). Reductions match top-down.
|
|
|
|
4 Reductions
|
|
|
|
?[a b] => 0
|
|
?a => 1
|
|
|
|
^[a b] => ^[a b]
|
|
^a => (a + 1)
|
|
|
|
=[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 0 b] => /[b a]
|
|
*[a 1 b] => b
|
|
*[a 2 b c d] => *[a 3 [0 1] 3 [1 c d] [1 0] 3 [1 2 3] [1 0] 5 5 b]
|
|
*[a 3 b] => **[a b]
|
|
*[a 4 b] => ?*[a b]
|
|
*[a 5 b] => ^*[a b]
|
|
*[a 6 b] => =*[a b]
|
|
*[a [b c] d] => [*[a b c] *[a d]]
|
|
*a => *a
|