# Stack

Language inspired by RPL, for use in a theoretical graphing calculator someday.

Small amounts of infix notation are permitted where it makes parsing easier, and for variables support.

The underlying stack is a fixed size, determined at compile time.  By default it is 192 KB.

Supports various data types:
  char (01) - UNSIGNED 8-bit character
  integer (04) - SIGNED 64-bit number
  number (05) - SIGNED semi-fixed-point decimal number (see below)
  fraction (08) - two integers representing an exact fraction
  vector (10) - length-prefixed array of values
  string (11) - length-prefixed string
  matrix (12) - MxN matrix
  code (FF) - a piece of unevaluated code

Programs may make use of global and local variable slots.  (Both take up stack space.)  There are also global flags that programs may use to track state (for example, whether to create a number or fraction when dividing).

## Examples
Push a character:
  'a'
  '\0'
  '\4'

Push an integer:
  42
  73
  8293914
  -72938

Assign to a variable:
  4 =: x
  5 =: y

Create a string:
  "Hello World!" print

Push a block of unevaluated code:
  { "Does nothing, kinda" print }

Conditional execution:
  { ...code_if } CONDITION if
  { ...code_if } { ...code_else } CONDITION ifelse
  VALUE { 'a' case { ...code_a } 'b' case { ...code_b } 'c' case { ...code_c } } switch

Loop:
  { ... } START STOP INCREMENT for VAR
  { ... } START STOP step
  { ...loop } { ...condition } while

Equivalent to algebraic f(x) = x^2 + 4*x + 3:
  { =: x x 2 ^ x 4 * + 3 + } =: f

Plot a function:
  { ...func } STARTX STOPX [START. STOP. [...]] NARG plot
