AjErl.Forms.MultiFunctionForm.Evaluate C# (CSharp) Method

Evaluate() public method

public Evaluate ( Context context ) : object
context Context
return object
        public object Evaluate(Context context)
        {
            string name = this.forms[0].Name;
            int arity = this.forms[0].ParameterExpressions.Count;

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

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

            foreach (var form in this.Forms)
                functions.Add((Function)form.Evaluate(context));

            var func = new MultiFunction(functions);

            context.SetValue(string.Format("{0}/{1}", name, arity), func);

            return func;
        }

Usage Example

Example #1
0
        public void RaiseIfArityIsWrong()
        {
            Context context = new Context();
            FunctionForm form1 = this.MakeForm("f(0) -> 1.");
            FunctionForm form2 = this.MakeForm("f(1) -> 1.");
            FunctionForm form3 = this.MakeForm("f(X, Y) -> f(X-1) + f(X-2).");
            MultiFunctionForm mform = new MultiFunctionForm(new FunctionForm[] { form1, form2, form3 });

            try
            {
                mform.Evaluate(context);
                Assert.Fail();
            }
            catch (Exception ex)
            {
                Assert.AreEqual("head mismatch", ex.Message);
            }
        }
All Usage Examples Of AjErl.Forms.MultiFunctionForm::Evaluate