public override dynamic Solve(Env.Environment env) { Env.Environment environ = Env.Environment.Scope(env); dynamic value = environ.Get(this.Parameters[0]); string input = ""; using (StreamWriter writer = new StreamWriter(Console.OpenStandardOutput())) { writer.Write(value.Value.ToString()); } using (StreamReader reader = new StreamReader(Console.OpenStandardInput())) { input = reader.ReadLine(); reader.Close(); } return(new Tree.String(input)); }
public override dynamic Evaluate(Env.Environment env) { /** * Should create a new environment scope * Assign all arguments to function paramenter names in order * Store them in the new Environment scope * Evaluate the function from the environment passing the new scope */ Env.Environment scope = Env.Environment.Scope(env); Function function = env.Get(this.name); if (this.arguments.Count != function.Parameters.Count) { this.Error("Expected " + function.Parameters.Count + " parameters to function " + this.name + " call. Found " + this.arguments.Count + " parameters.", 0, 0); } for (int i = 0; i < this.arguments.Count; i++) { scope.Set(function.Parameters[i], this.arguments[i].Evaluate(env)); } return(function.Solve(scope)); }
public override dynamic Solve(Env.Environment env) { Env.Environment environ = Env.Environment.Scope(env); AST value = environ.Get(this.Parameters[0]); dynamic print = ""; if (value.Type == TreeType.LIST) { print = value.Evaluate(environ).ToString(); } else if (value.Type == TreeType.LIST_ACCESS) { print = value.Evaluate(env).ToString(); } else { print = value.Evaluate(environ).Value; } using (StreamWriter writer = new StreamWriter(Console.OpenStandardOutput())) { writer.Write(print.ToString() + "\n"); } return(value); }