private static object Sum(Context context, IList<object> arguments) { if (arguments[0] is EmptyList) return 0; AddExpression addexpr = new AddExpression(null, null); List list = (List)arguments[0]; object result = 0; while (list != null) { result = addexpr.Apply(result, list.Head); list = (List)list.Tail; } return result; }