public Evaluate ( Context context, bool withvars = false ) : object | ||
context | Context | |
withvars | bool | |
리턴 | 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;
}
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); }