| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
9.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.carto extract its car.
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on April 20, 2013 using texi2html 5.0.
