Exemplo n.º 1
0
        public static T Lookup(int i, DataType ts)
        {
            if (ts is One one)
            {
                if (i == 0)
                {
                    return(one.Alpha);
                }
                return(Lookup(i - 1, new Zero(one.RList)));
            }

            if (ts is Zero zero)
            {
                var node = RList <Tuple <T, T> > .Lookup(i / 2, zero.RList);

                if (i % 2 == 0)
                {
                    return(node.Item1);
                }
                return(node.Item2);
            }

            throw new ArgumentException("must be Zero or One", nameof(ts));
        }