示例#1
0
        public static R FoldR <T, R>(Func <T, R, R> accumulator, R initVal, IEnumerable <T> list)
        {
            // 防止每次递归调用都创建 TailedSequence<T> 对象,做了优化处理
            TailedSequence <T> _list = list as TailedSequence <T>;

            _list = _list ?? new TailedSequence <T>(list);

            if (list == TailedSequence <T> .Empty)
            {
                return(initVal);
            }

            return(accumulator(_list.Head, FoldR(accumulator, initVal, _list.Tail)));
        }
示例#2
0
        public static R FoldL <T, R>(Func <R, T, R> accumulator, R initVal, IEnumerable <T> list)
        {
            // 防止每次递归调用都创建 TailedSequence<T> 对象做了,优化处理
            TailedSequence <T> _list = list as TailedSequence <T>;

            _list = _list ?? new TailedSequence <T>(list);

            if (list == TailedSequence <T> .Empty)
            {
                return(initVal);
            }

            return(FoldL(accumulator, accumulator(initVal, _list.Head), _list.Tail));
        }