 }
 
 object *fn_globals (object *args, object *env) {
-  (void) args, (void) env;
-  object *list = GlobalEnv;
-  while (list != NULL) {
-    printobject(car(car(list)));
-    pln();
-    list = cdr(list);
-  }
-  return nil;
+  (void) args;
+  return fn_mapcar(cons(symbol(CAR),cons(GlobalEnv,nil)), env);
 }
 
 object *fn_locals (object *args, object *env) {

// In-place operations

object **place (object *args, object *env) {
  if (!consp(args)) return &cdr(findvalue(args, env));
  object* function = first(args);
  if (issymbol(function, CAR) || issymbol(function, FIRST)) {
    object *value = eval(second(args), env);

  if ((form->type == NUMBER) || (form->type == STRING)) return form;

  if (form->type == SYMBOL) {
    symbol_t name = form->name;
    if (name == NIL) return nil;
    object *pair = value(name, env);
    if (pair != NULL) return cdr(pair);
