public static Object With(Cons args, Environment environment) { string v = //"//(with " + Printer.ConsToString(args) + ")" + NewLine + "{" + NewLine; Cons bindings = (Cons)args.First(); Environment localEnvironment = new Environment(environment); while ((bindings != null) && (bindings.Length() > 1)) { v += GenerateAssignLocal((Symbol)bindings.First(), Generate(bindings.Second(), environment), localEnvironment); bindings = (Cons)bindings.Cddr(); } foreach (object item in (Cons)args.Cdr()) { v += Generate(item, localEnvironment); } return(v + "}"); }