int                           ldl_entry_p(void);
LdlExternalState     ldl_get_state(void);
LdlExternalState     ldl_create_state(int state_size);

void                  ldl_make_int(LdlObject ldl_object, int i);
void                  ldl_make_float(LdlObject ldl_object, double f);
void                  ldl_make_string(LdlObject ldl_object, char* s);
void                  ldl_make_complex_object(LdlObject ldl_object,
                           char* name, LdlObject* args, int no_of_args);
void                  ldl_make_list(LdlObject ldl_object,
                          LdlObject* args, int no_of_args);
void                  ldl_make_set(LdlObject ldl_object, LdlObject*
                          args, int no_of_args);

int                     ldl_int_p(LdlObject ldl)object);
int                     ldl_float_p(LdlObject ldl_object);
int                     ldl_string_p(LdlObject ldl_object);
int                     ldl_complex_object_p(LdlObject ldl_object);
int                     ldl_list_p(LdlObject ldl_object);
int                     ldl_set_p(LdlObject ldl_object);

int                     ldl_get_int(LdlObject ldl_object);
double              ldl_get_float(LdlObject ldl_object);
char*                ldl_get_string(LdlObject ldl_object);


char*                ldl_get_complex_object_name(LdlObject
                          ldl_object);
int                     ldl_get_complex_object_arity(LdlObject
                          ldl_object);
LdlObject          ldl_get_complex_object_nth_argument(LdlObject
                          ldl_object, unsigned int i);

int                     ldl_get_list_length(LdlObject ldl_object);
LdlObject          ldl_get_list_nth_element(LdlObject ldl_object,
                          unsigned int i);

int                     ldl_get_set_cardinality(LdlObject ldl_object);
LdlObject          ldl_get_set_nth_element(LdlObject ldl_object,
                           unsigned int i);