3 struct Expr get_scope_value(struct Expr scope, struct Expr name)
6 struct Expr value = assoc(name, scope.cons->car);
7 return nil_p(value) ? get_scope_value(scope.cons->cdr, name) : value;
13 struct Expr set_scope_value(struct Expr scope, struct Expr name, struct Expr value)
16 if (!nil_p(assoc(name, scope.cons->car))) {
17 return CONS(CONS(name, value), scope);
19 scope.cons->cdr = set_scope_value(scope.cons->cdr, name, value);
23 /* TODO: set_scope_value creates redundant global scopes */
24 return CONS(CONS(name, value), NIL);