Ejemplo n.º 1
0
    private static TreeZipper GoDown(TreeZipper zipper)
    {
        if (zipper == null || !zipper.Focus.Children.Any())
        {
            return(null);
        }

        var focus    = zipper.Focus;
        var children = focus.Children;

        var newCrumb = new TreeCrumb(focus.Value, Array.Empty <Tree>(), children.Skip(1).ToArray());

        return(new TreeZipper(children.First(), new[] { newCrumb }.Concat(zipper.Crumbs)));
    }
Ejemplo n.º 2
0
    private static TreeZipper GoRight(TreeZipper zipper)
    {
        if (zipper == null || !zipper.Crumbs.Any() || !zipper.Crumbs.First().Right.Any())
        {
            return(null);
        }

        var crumbs     = zipper.Crumbs;
        var firstCrumb = crumbs.First();

        var newCrumb = new TreeCrumb(firstCrumb.Value, firstCrumb.Left.Concat(new[] { zipper.Focus }).ToArray(), firstCrumb.Right.Skip(1).ToArray());

        return(new TreeZipper(firstCrumb.Right.First(), new[] { newCrumb }.Concat(crumbs.Skip(1))));
    }