def expand_clauses(clauses): if clauses is EmptyList: return Boolean(False) first = car(clauses) rest = cdr(clauses) if is_cond_else_clause(first): if rest is EmptyList: return sequence_expr(cond_actions(first)) else: raise ValueError('ELSE caluse isn\'t last: %s' % clauses) else: return make_if(cond_predicate(first), sequence_expr(cond_actions(first)), expand_clauses(rest))
def first_operand(ops): return car(ops)
def operator(expr): return car(expr)
def first_expr(seq): return car(seq)
def cond_predicate(clause): return car(clause)