Ejemplo n.º 1
0
        private static Tuple <T, DataType> Uncons(DataType dataType)
        {
            if (dataType is One one)
            {
                if (RList <Tuple <T, T> > .IsEmpty(one.RList))
                {
                    return(new Tuple <T, DataType>(one.Alpha, Empty));
                }
                return(new Tuple <T, DataType>(one.Alpha, new Zero(one.RList)));
            }

            if (dataType is Zero zero)
            {
                var xy = RList <Tuple <T, T> > .Head(zero.RList);

                var psp = RList <Tuple <T, T> > .Tail(zero.RList);

                return(new Tuple <T, DataType>(xy.Item1, new One(xy.Item2, psp)));
            }

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