#ifndef DATUM_H #define DATUM_H #include enum datum_type { datum_type_i32, datum_type_bool, datum_type_primitive_proc, datum_type_compiled_proc, }; typedef struct datum { enum datum_type type; int32_t value; struct datum* (*primitive_procedure) (struct datum*); void* compiled_procedure_entry; void* env; struct datum *next; } datum; datum* cons(datum *e, datum *xs); datum* const_i32(int32_t value); datum* const_bool(int32_t value); datum* const_primitive_proc(datum* (*primitive_procedure) (datum*)); int primitive_procedure(datum* d); int is_false(datum *d); int datum_eq(datum *a, datum *b); int datum_lt(datum *a, datum *b); void print_datum(datum* d); void* compiled_procedure_entry(datum* d); #endif