コード例 #1
0
        IEnumerable <T> Eval(Node expr, T root)
        {
            if (expr is App)
            {
                var app = (App)expr;
                var op  = app.Operation;
                var lhs = app.Operands[0];
                var rhs = app.Operands[1];

                var res = _ops
                          .DepthFirstSearch(root, r => Satisfies(lhs, r))
                          .SelectMany(n => _ops.Navigate(n, op))
                          .Where(n => Satisfies(rhs, n));

                foreach (var c in res)
                {
                    yield return(c);
                }
            }
            else
            {
                var res = _ops.DepthFirstSearch(root, r => Satisfies(expr, r));
                foreach (var c in res)
                {
                    yield return(c);
                }
            }
            yield break;
        }