private static boolean newScope(Environment e, LList code) {
		Scope outer = null;
		for(int z = e.scopes.size()-1; z >= 1; z--) {
			if (e.scopes.get(z).procedure && !(Primitives.prim(e.scopes.get(z).code))) {
				outer = e.scopes.get(z); break;
			}
		}
		if (canTail(outer, e, code)) {
			// smash the call stack down to the tail procedure
			while(e.scopes.peek() != outer) { e.scopes.pop(); }
			outer.index = 0;
			outer.trace.clear();
			outer.bindings.clear();
			return true;
		}
		else {
			// apply the collected arguments in a new scope
			e.push(code, true);
			return false;
		}
	}