А это вообще валидный способ, эвалить строки?
Функцию можно заэвалить по имени и юзать на сишной стороне
C_word foo_evaluted;
C_word args = C_SCHEME_END_OF_LIST;
CHICKEN_run(CHICKEN_default_toplevel);
CHICKEN_load("init");
CHICKEN_eval_string("foo", &foo_evaluted);
CHICKEN_apply(foo_evaluted, args, NULL);
А другие scheme объекты так использовать не получается. Теперь понятнее?