public static Node updateRunTimeEnvironment(Node root) {
        SymTab newTable = runTimeStack.push();
        int level = root.getSymTab().getNestingLevel() + 1;
        newTable.setNestingLevel(level);

        if (level > runTimeDisplay.getCurrentNestingLevel()) {
            runTimeDisplay.push(newTable);
        }
        else {
            runTimeDisplay.set(level, newTable);
            newTable.setPredecessor(runTimeStack.getPredecessor(newTable.getNestingLevel()));
        }

        SymTabEntry entry = runTimeDisplay.lookup(root.getToken().getText()); // Get corresponding SymTabEntry
        Procedure procedure = (Procedure) entry.get(Attribute.BUILTIN_PROCEDURE);
        Node lambda = (Node) entry.get(Attribute.LAMBDA_NODE);
        Node variable = (Node) entry.get(Attribute.VARIABLE_NODE);
        ArrayList<Node> parameters;

        if (procedure != null) {
            parameters = extractParameters(root);
            Node result = procedure.run(parameters);
            return processResult(result, procedure);
        }
        else if (lambda != null) {
            parameters = extractParameters(root);

            // Add parameters to the runtime stack
            int i = 0;
            for (String paramName : lambda.getSymTab().keySet()) {
                SymTabEntry newEntry = runTimeStack.enterLocal(paramName);
                Node paramNode = parameters.get(i++);

                switch (paramNode.getToken().getType()) {
                    case SS_QUOTE:
                        newEntry.put(Attribute.QUOTE_NODE, paramNode.getCdr());
                        break;
                    case IDENTIFIER:
                    case SYMBOL:
                        SymTabEntry nodeType = getVariableType(paramNode);

                        //TODO: Assuming the identifier refers to a number constant for now
                        Number constant = (Number) nodeType.get(Attribute.NUMBER_CONSTANT);
                        newEntry.put(Attribute.NUMBER_CONSTANT, constant);
                        break;
                    case NUMBER:
                        newEntry.put(Attribute.NUMBER_CONSTANT, paramNode.getToken().getValue());
                }
            }

            return lambda;
        }
        else {
            // Assuming that variables eventually refer to a lambda node
            entry = getVariableType(variable);
            Node lambdaRoot = (Node) entry.get(Attribute.LAMBDA_NODE);
            return updateRunTimeEnvironment(lambdaRoot);
        }
    }