sExpression *evalSequence(sList *exps, sEnvironment *env){ if(isLastExp(exps)){ return eval(firstExp(exps), env); }else{ eval(firstExp(exps), env); return evalSequence(restExp(exps), env); } }
void sequenceToExp(Register result, Register seq) { if (isNull(seq)) copyReg(result, seq); else { isLastExp(result, seq); if (isTrue(result)) firstExp(result, seq); else makeBegin(result, seq); } }
Obj transformOr(Obj expr) { Obj seq = boolExps(expr); if (noExps(seq)) return FALSEOBJ; Obj first = firstExp(seq); List* cdr = GETLIST(seq)->cdr; Obj rest = LISTOBJ(makeList(OROBJ, cdr)); List* ifTrans = makeList( IFOBJ, makeList(first, makeList(TRUEOBJ, makeList(rest, NULL)))); return LISTOBJ(ifTrans); }