hsnock-0.5.1: Nock 5K interpreter.

Safe HaskellSafe-Inferred

Language.Nock5K.Spec

Contents

Synopsis

Structures

data Noun Source

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

Constructors

Atom !Integer 
!Noun :- !Noun 

Instances

type Nock = Either StringSource

Monad representing either a computed result or an error message.

Reductions

nock :: Noun -> Nock NounSource

  nock(a)           *a

tar :: Noun -> Nock NounSource

  *[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

fas :: Noun -> Nock NounSource

  /[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

tis :: Noun -> Nock NounSource

  =[a a]            0
  =[a b]            1
  =a                =a

lus :: Noun -> Nock NounSource

  +[a b]            +[a b]
  +a                1 + a

wut :: Noun -> Nock NounSource

  ?[a b]            0
  ?a                1