public static Object For(Cons args, Environment environment) { Environment localEnvironment = new Environment(environment); Runtime.Eval(args.First(), localEnvironment); object test; while ((Conversions.ObjectToBoolean(test = Runtime.Eval(args.Second(), localEnvironment)))) { foreach (object item in (Cons)args.Cdddr()) { Runtime.Eval(item, localEnvironment); } Runtime.Eval(args.Third(), localEnvironment); } return(test); }
/// <summary> /// (for initialiser test iterator statement) /// The for special form corresponds to the for construct found in most algebraic /// programming languages. The initialiser is executed. The statement is executed /// while test is true. The iterator is executed at the end of each statement execution. /// </summary> /// <param name="args"></param> /// <param name="environment"></param> /// <returns></returns> public static Object For(Cons args, Environment environment) { Environment localEnvironment = new Environment(environment); Runtime.Eval(args.First(),localEnvironment); object test; while ((Conversions.ObjectToBoolean(test = Runtime.Eval(args.Second(),localEnvironment)))) { foreach (object item in (Cons)args.Cdddr()) { Runtime.Eval(item, localEnvironment); } Runtime.Eval(args.Third(),localEnvironment); } return test; }
/// <summary> /// (for initialiser test iterator statement) /// </summary> public static Object For(Cons args, LSharp.Environment environment) { //string v = "//(for " + Printer.ConsToString(args) + ")" + NewLine + "{" + NewLine; string v = "{" + NewLine; LSharp.Environment localEnvironment = new LSharp.Environment(environment); v += Generate(args.First(),localEnvironment); v += Generate(args.Second(),localEnvironment); v += @"while ((Conversions.ObjectToBoolean(retval)) { "; foreach (object item in (Cons)args.Cdddr()) { v += Generate(item, localEnvironment); } v += Generate(args.Third(),localEnvironment); v += Generate(args.Second(),localEnvironment); v += @"} "; return v + "}" + NewLine; }