#include static PRIMITIVE STk_when(SCM l, SCM env) { SCM res = UNDEFINED; if (NULLP(l)) Err("when: no argument list given", NIL); if (STk_eval(CAR(l), env) != Ntruth) { if (NULLP(l = CDR(l))) Err("when: null body", NIL); /* Argument list is well formed. Evaluates each expression of the body */ for ( ; !NULLP(l); l = CDR(l)) res = STk_eval(CAR(l), env); } return res; } static PRIMITIVE STk_unless(SCM l, SCM env) { SCM res = UNDEFINED; if (!NULLP(l)) { if (STk_eval(CAR(l), env) == Ntruth) { for (l = CDR(l); !NULLP(l); l = CDR(l)) { res = STk_eval(CAR(l), env); } } } return res; } void STk_init_when(void) { STk_add_new_primitive("when", tc_fsubr, STk_when); STk_add_new_primitive("unless", tc_fsubr, STk_unless); }