Node:A Simple Representation, Next:Faster Integers, Up:Data Representation in Scheme

The simplest way to meet the above requirements in C would be to
represent each value as a pointer to a structure containing a type
indicator, followed by a union carrying the real value. Assuming that
`SCM`

is the name of our universal type, we can write:

enum type { integer, pair, string, vector, ... }; typedef struct value *SCM; struct value { enum type type; union { int integer; struct { SCM car, cdr; } pair; struct { int length; char *elts; } string; struct { int length; SCM *elts; } vector; ... } value; };with the ellipses replaced with code for the remaining Scheme types.

This representation is sufficient to implement all of Scheme's
semantics. If `x` is an `SCM`

value:

- To test if
`x`is an integer, we can write

.`x`->type == integer - To find its value, we can write

.`x`->value.integer - To test if
`x`is a vector, we can write

.`x`->type == vector - If we know
`x`is a vector, we can write

to refer to its first element.`x`->value.vector.elts[0] - If we know
`x`is a pair, we can write

to extract its car.`x`->value.pair.car