Методы расширения последовательностей

function AdjacentGroup<T>(Self: sequence of T): sequence of array of T;
        Группирует одинаковые подряд идущие элементы, получая последовательность массивов
function Batch<T>(Self: sequence of T; size: integer): sequence of sequence of T;
        Разбивает последовательность на серии длины size
function Batch<T, Res>(Self: sequence of T; size: integer; proj: Func<IEnumerable<T>, Res>): sequence of Res;
        Разбивает последовательность на серии длины size и применяет проекцию к каждой серии
function Cartesian<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1);
        Декартово произведение последовательностей
function Cartesian<T, T1, T2>(Self: sequence of T; b: sequence of T1; func: (T,T1)->T2): sequence of T2;
        Декартово произведение последовательностей
procedure ForEach<T>(Self: sequence of T; action: T -> ());
        Применяет действие к каждому элементу последовательности
procedure ForEach<T>(Self: sequence of T; action: (T,integer) -> ());
        Применяет действие к каждому элементу последовательности, зависящее от номера элемента
function Incremental(Self: sequence of integer): sequence of integer;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: array of integer): sequence of integer;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: List<integer>): sequence of integer;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: LinkedList<integer>): sequence of integer;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: sequence of real): sequence of real;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: array of real): sequence of real;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: List<real>): sequence of real;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental(Self: LinkedList<real>): sequence of real;
        Возвращает последовательность разностей соседних элементов исходной последовательности
function Incremental<T, T1>(Self: sequence of T; func: (T,T)->T1): sequence of T1;
        Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func
function Incremental<T, T1>(Self: sequence of T; func: (T,T,integer)->T1): sequence of T1;
        Возвращает последовательность разностей соседних элементов исходной последовательности. В качестве функции разности используется func
function Interleave<T>(Self: sequence of T; a: sequence of T): sequence of T;
        Чередует элементы двух последовательностей
function Interleave<T>(Self: sequence of T; a, b: sequence of T): sequence of T;
        Чередует элементы трех последовательностей
function Interleave<T>(Self: sequence of T; a, b, c: sequence of T): sequence of T;
        Чередует элементы четырех последовательностей
function JoinIntoString<T>(Self: sequence of T; delim: string): string;
        Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя delim в качестве разделителя
function JoinIntoString<T>(Self: sequence of T): string;
        Преобразует элементы последовательности в строковое представление, после чего объединяет их в строку, используя пробел в качестве разделителя
function LastMaxBy<T, TKey>(Self: sequence of T; selector: T->TKey): T;
        Возвращает последний элемент последовательности с максимальным значением ключа
function LastMinBy<T, TKey>(Self: sequence of T; selector: T->TKey): T;
        Возвращает последний элемент последовательности с минимальным значением ключа
function MaxBy<T, TKey>(Self: sequence of T; selector: T->TKey): T;
        Возвращает первый элемент последовательности с максимальным значением ключа
function MinBy<T, TKey>(Self: sequence of T; selector: T->TKey): T;
        Возвращает первый элемент последовательности с минимальным значением ключа
function Numerate<T>(Self: sequence of T): sequence of (integer, T);
        Нумерует последовательность с единицы
function Numerate<T>(Self: sequence of T; from: integer): sequence of (integer, T);
        Нумерует последовательность с номера from
function Order<T>(Self: sequence of T): sequence of T;
        Возвращает отсортированную по возрастанию последовательность
function OrderDescending<T>(Self: sequence of T): sequence of T;
        Возвращает отсортированную по убыванию последовательность
function Pairwise<T>(Self: sequence of T): sequence of (T, T);
        Превращает последовательность в последовательность пар соседних элементов
function Pairwise<T, Res>(Self: sequence of T; func: (T,T)->Res): sequence of Res;
        Превращает последовательность в последовательность пар соседних элементов, применяет func к каждой паре полученных элементов и получает новую последовательность
function Partition<T>(Self: sequence of T; cond: T->boolean): (sequence of T, sequence of T);
        Разделяет последовательность на две по заданному условию. Реализуется двухпроходным алгоритмом
function Partition<T>(Self: sequence of T; cond: (T,integer)->boolean): (sequence of T, sequence of T);
        Разделяет последовательность на две по заданному условию, в котором участвует индекс. Реализуется двухпроходным алгоритмом
function Print<T>(Self: sequence of T; delim: string): sequence of T;
        Выводит последовательность на экран, используя delim в качестве разделителя
function Print<T>(Self: sequence of T): sequence of T;
        Выводит последовательность на экран, используя пробел в качестве разделителя
function PrintLines<T>(Self: sequence of T): sequence of T;
        Выводит последовательность, каждый элемент выводится на новой строке
function PrintLines<T,T1>(Self: sequence of T; map: T->T1): sequence of T;
        Выводит последовательность, каждый элемент отображается с помощью функции map и выводится на новой строке
function Println<T>(Self: sequence of T; delim: string): sequence of T;
        Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку
function Println<T>(Self: sequence of T): sequence of T;
        Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку
function Product(Self: sequence of real): real;
        Возвращает произведение элементов последовательности
function Product(Self: sequence of integer): integer;
        Возвращает произведение элементов последовательности
function SkipLast<T>(Self: sequence of T; count: integer): sequence of T;
        Возвращает последовательность без последних count элементов
function Slice<T>(Self: sequence of T; from, step: integer): sequence of T;
        Возвращает срез последовательности от номера from с шагом step > 0
function Slice<T>(Self: sequence of T; from, step, count: integer): sequence of T;
        Возвращает срез последовательности от номера from с шагом step > 0 длины не более count
function Sorted<T>(Self: sequence of T): sequence of T;
        Возвращает отсортированную по возрастанию последовательность
function SortedDescending<T>(Self: sequence of T): sequence of T;
        Возвращает отсортированную по убыванию последовательность
function SplitAt<T>(Self: sequence of T; ind: integer): (sequence of T, sequence of T);
        Разбивает последовательность на две в позиции ind. Реализуется двухпроходным алгоритмом
function Tabulate<T, T1>(Self: sequence of T; F: T->T1): sequence of (T, T1);
        Табулирует функцию последовательностью
function TakeLast<T>(Self: sequence of T; count: integer): sequence of T;
        Возвращает последние count элементов последовательности
function ToHashSet<T>(Self: sequence of T): HashSet<T>;
        Возвращает множество HashSet по данной последовательности
function ToLinkedList<T>(Self: sequence of T): LinkedList<T>;
        Возвращает LinkedList по данной последовательности
function ToSortedSet<T>(Self: sequence of T): SortedSet<T>;
        Возвращает множество SortedSet по данной последовательности
function UnZipTuple<T, T1>(Self: sequence of (T, T1)): (sequence of T, sequence of T1);
        Разъединяет последовательность двухэлементных кортежей на две последовательности. Реализуется двухпроходным алгоритмом
function UnZipTuple<T, T1, T2>(Self: sequence of (T, T1, T2)): (sequence of T, sequence of T1, sequence of T2);
        Разъединяет последовательность трехэлементных кортежей на три последовательности. Реализуется многопроходным алгоритмом
function UnZipTuple<T, T1, T2, T3>(Self: sequence of (T, T1, T2, T3)): (sequence of T, sequence of T1, sequence of T2, sequence of T3);
        Разъединяет последовательность четырехэлементных кортежей на четыре последовательности. Реализуется многопроходным алгоритмом
function WriteLines(Self: sequence of string; fname: string): sequence of string;
        Выводит последовательность строк в файл
function ZipTuple<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1);
        Объединяет две последовательности в последовательность двухэлементных кортежей
function ZipTuple<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2);
        Объединяет три последовательности в последовательность трехэлементных кортежей
function ZipTuple<T, T1, T2, T3>(Self: sequence of T; a: sequence of T1; b: sequence of T2; c: sequence of T3): sequence of (T, T1, T2, T3);
        Объединяет четыре последовательности в последовательность четырехэлементных кортежей