AjErl.Expressions.MultiFunExpression.Evaluate C# (CSharp) Method

Evaluate() public method

public Evaluate ( Context context, bool withvars = false ) : object
context Context
withvars bool
return object
        public object Evaluate(Context context, bool withvars = false)
        {
            int arity = this.expressions[0].ParameterExpressions.Count;

            if (!this.expressions.Skip(1).All(f => f.ParameterExpressions.Count == arity))
                throw new Exception("head mismatch");

            IList<Function> functions = new List<Function>();

            foreach (var form in this.Expressions)
                functions.Add((Function)form.Evaluate(context, true));

            var func = new MultiFunction(functions);

            return func;
        }

Usage Example

Ejemplo n.º 1
0
        public void EvaluateWithThreeExpressions()
        {
            Context context = new Context();
            FunExpression expr1 = this.MakeExpression("fun(0) -> 1 end.");
            FunExpression expr2 = this.MakeExpression("fun(1) -> 1 end.");
            FunExpression expr3 = this.MakeExpression("fun(X) -> f(X-1) + f(X-2) end.");
            MultiFunExpression mexpr = new MultiFunExpression(new FunExpression[] { expr1, expr2, expr3 });

            var result = mexpr.Evaluate(context);

            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(MultiFunction));

            var mfunc = (MultiFunction)result;

            Assert.IsNotNull(mfunc.Functions);
            Assert.AreEqual(3, mfunc.Functions.Count);
        }
All Usage Examples Of AjErl.Expressions.MultiFunExpression::Evaluate