[ << ]  [ < ]  [ Up ]  [ > ]  [ >> ]  [Top]  [Contents]  [Index]  [ ? ] 
10.2.1 A Simple Representation
The simplest way to represent Scheme values 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
x>value.vector.elts[0]
to refer to its first element. 
If we know x is a pair, we can write
x>value.pair.car
to extract its car.
[ << ]  [ < ]  [ Up ]  [ > ]  [ >> ]  [Top]  [Contents]  [Index]  [ ? ] 
This document was generated on February 3, 2012 using texi2html 5.0.