Zip, Cartesian - сделаны внешние функции до 5 параметров, в т.ч. с проекцией

Zip, Cartesian - методы расширения дополнены чтобы было как во внешних
Перегенерирована справка
This commit is contained in:
Mikhalkovich Stanislav 2024-07-30 22:56:03 +03:00
parent 35c7bc5877
commit c4fd47128b
13 changed files with 507 additions and 181 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "9";
public const string Build = "0";
public const string Revision = "3517";
public const string Revision = "3520";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=9
%REVISION%=3517
%COREVERSION%=0
%REVISION%=3520
%MINOR%=9
%MAJOR%=3

View file

@ -2,7 +2,8 @@
<param name="Keyword" value="Each">
<param name="Keyword" value="EachCount">
<param name="Keyword" value="Get">
<param name="Keyword" value="operator"></object>
<param name="Keyword" value="operator">
<param name="Keyword" value="Update"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Ìåòîäû ðàñøèðåíèÿ ñëîâàðåé</H1>
<table border=0 cellpadding=5><tr><td><code><b>function</b> Each&lt;Key,Source,Res&gt;(Self: <b>sequence </b> <b>of</b> System.Linq.IGrouping&lt;Key,Source&gt;; grOperation: System.Linq.IGrouping&lt;Key,Source&gt; -&gt; Res): Dictionary&lt;Key,Res&gt;;</code>
@ -15,7 +16,19 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ÷àñòîòíûé ñëîâàðü îáúåêòîâ ïîñëåäîâàòåëüíîñòè</td></tr>
<tr><td><code><b>function</b> Get&lt;Key, Value&gt;(Self: IDictionary&lt;Key, Value&gt;; K: Key; V: Value := default(Value)): Value;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò â ñëîâàðå çíà÷åíèå, ñâÿçàííîå ñ óêàçàííûì êëþ÷îì, à åñëè òàêîãî êëþ÷à íåò, òî çíà÷åíèå ïî óìîë÷àíèþ</td></tr>
<tr><td><code><b>function</b> operator-&lt;TKey, TVal&gt;(Self: Dictionary&lt;TKey, TVal&gt;; key: TKey): Dictionary&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñëîâàðü, â êîòîðîì èç èñõîäíîãî ñëîâàðÿ óäàëåí ýëåìåíò ñ äàííûì êëþ÷îì</td></tr>
<tr><td><code><b>function</b> operator-&lt;TKey, TVal&gt;(Self: Dictionary&lt;TKey, TVal&gt;; keys: <b>sequence </b> <b>of</b> TKey): Dictionary&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñëîâàðü, â êîòîðîì èç èñõîäíîãî ñëîâàðÿ óäàëåíû âñå ýëåìåíòû ñ êëþ÷àìè, çàäàâàåìûìè âòîðûì îïåðàíäîì</td></tr>
<tr><td><code><b>function</b> operator+&lt;TKey, TVal&gt;(Self: Dictionary&lt;TKey, TVal&gt;; dict: Dictionary&lt;TKey, TVal&gt;): Dictionary&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îáúåäèíÿåò äàííûå â äâóõ ñëîâàðÿõ. Åñëè â îáîèõ èìåþòñÿ îäèíàêîâûå êëþ÷è, òî ñ êëþ÷îì ñâÿçûâàåòñÿ çíà÷åíèå èç âòîðîãî ñëîâàðÿ</td></tr>
<tr><td><code><b>procedure</b> operator+=&lt;TKey, TVal&gt;(Self: Dictionary&lt;TKey, TVal&gt;; update: Dictionary&lt;TKey, TVal&gt;);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îáíîâëÿåò äàííûå â ñëîâàðå äàííûìè èç äðóãîãî ñëîâàðÿ</td></tr>
<tr><td><code><b>procedure</b> operator-=&lt;Key,Value&gt;(Self: IDictionary&lt;Key,Value&gt;; k: Key);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Операция удаления из словаря пары с указанным значением ключа</td></tr>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëÿåò èç ñëîâàðÿ ïàðû ñ óêàçàííûì çíà÷åíèåì êëþ÷à</td></tr>
<tr><td><code><b>procedure</b> operator-=&lt;Key,Value&gt;(Self: IDictionary&lt;Key,Value&gt;; keys: <b>sequence </b> <b>of</b> Key);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óäàëÿåò èç ñëîâàðÿ ïàðû ñ óêàçàííûìè çíà÷åíèÿìè êëþ÷à</td></tr>
<tr><td><code><b>procedure</b> Update&lt;TKey, TVal&gt;(Self: Dictionary&lt;TKey, TVal&gt;; update: Dictionary&lt;TKey, TVal&gt;);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îáíîâëÿåò äàííûå â ñëîâàðå äàííûìè èç äðóãîãî ñëîâàðÿ</td></tr>
</table>
</body></HTML>

View file

@ -6,7 +6,6 @@
<param name="Keyword" value="CountOf">
<param name="Keyword" value="Flatten">
<param name="Keyword" value="ForEach">
<param name="Keyword" value="function">
<param name="Keyword" value="Incremental">
<param name="Keyword" value="Interleave">
<param name="Keyword" value="JoinToString">
@ -43,9 +42,7 @@
<param name="Keyword" value="ZipTuple"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Ìåòîäû ðàñøèðåíèÿ ïîñëåäîâàòåëüíîñòåé</H1>
<table border=0 cellpadding=5><tr><td><code>{<b>function</b> Sum&lt;T&gt;(Self: <b>sequence </b> <b>of</b> T; f: T-&gt;BigInteger): BigInteger;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñóììó ýëåìåíòîâ ïîñëåäîâàòåëüíîñòè, ñïðîåêòèðîâàííûõ íà ÷èñëîâîå çíà÷åíèå - ïîêà íå ðàáîòàåò äëÿ Lst(1,2,3)</td></tr>
<tr><td><code><b>function</b> AdjacentGroup&lt;T&gt;(Self: <b>sequence </b> <b>of</b> T): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<table border=0 cellpadding=5><tr><td><code><b>function</b> AdjacentGroup&lt;T&gt;(Self: <b>sequence </b> <b>of</b> T): <b>sequence </b> <b>of</b> <b>array</b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ãðóïïèðóåò îäèíàêîâûå ïîäðÿä èäóùèå ýëåìåíòû, ïîëó÷àÿ ïîñëåäîâàòåëüíîñòü ìàññèâîâ</td></tr>
<tr><td><code><b>function</b> Average(Self: <b>sequence </b> <b>of</b> BigInteger): real;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñðåäíåå ýëåìåíòîâ ïîñëåäîâàòåëüíîñòè</td></tr>

View file

@ -21,6 +21,7 @@
<param name="Keyword" value="ToBigInteger">
<param name="Keyword" value="ToInteger">
<param name="Keyword" value="ToIntegers">
<param name="Keyword" value="ToLines">
<param name="Keyword" value="ToReal">
<param name="Keyword" value="ToReals">
<param name="Keyword" value="ToWords">
@ -80,6 +81,8 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðåîáðàçóåò ñòðîêó â ìàññèâ öåëûõ</td></tr>
<tr><td><code><b>function</b> ToIntegers(Self: string; N: integer): <b>array</b> <b>of</b> integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ñ÷èòûâàåò èç ñòðîêè ìàññèâ èç N öåëûõ</td></tr>
<tr><td><code><b>function</b> ToLines(Self: string): <b>array</b> <b>of</b> string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðåîáðàçóåò ìíîãîñòðî÷íóþ ñòðîêó â ìàññèâ ñòðîê</td></tr>
<tr><td><code><b>function</b> ToReal(Self: string): real;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðåîáðàçóåò ñòðîêó â âåùåñòâåííîå</td></tr>
<tr><td><code><b>function</b> ToReal(Self: string; defaultvalue: real): real;</code>

View file

@ -11,6 +11,7 @@
<param name="Keyword" value="Lst">
<param name="Keyword" value="LstInt">
<param name="Keyword" value="LstStr">
<param name="Keyword" value="Pair">
<param name="Keyword" value="SSet">
<param name="Keyword" value="SSetInt">
<param name="Keyword" value="SSetStr"></object>
@ -20,8 +21,12 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñëîâàðü ïàð ýëåìåíòîâ (êëþ÷, çíà÷åíèå)</td></tr>
<tr><td><code><b>function</b> Dict&lt;TKey, TVal&gt;(<b>params</b> pairs: <b>array</b> <b>of</b> (TKey, TVal)): Dictionary&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñëîâàðü ïàð ýëåìåíòîâ (êëþ÷, çíà÷åíèå)</td></tr>
<tr><td><code><b>function</b> Dict&lt;TKey, TVal&gt;(pairs: <b>sequence </b> <b>of</b> KeyValuePair&lt;TKey, TVal&gt;): Dictionary&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает словарь пар элементов (ключ, значение), построенный по последовательности пар</td></tr>
<tr><td><code><b>function</b> Dict&lt;TKey, TVal&gt;(pairs: <b>sequence </b> <b>of</b> (TKey, TVal)): Dictionary&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает словарь пар элементов (ключ, значение), построенный на значениях последовательности</td></tr>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает словарь пар элементов (ключ, значение), построенный по последовательности пар</td></tr>
<tr><td><code><b>function</b> Dict&lt;TKey, TVal&gt;(keys: <b>sequence </b> <b>of</b> TKey; values: <b>sequence </b> <b>of</b> TVal): Dictionary&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает словарь пар элементов (ключ, значение), построенный по последовательностям ключей и значений</td></tr>
<tr><td><code><b>function</b> DictInt(<b>params</b> pairs: <b>array</b> <b>of</b> (integer, integer)): Dictionary&lt;integer, integer&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñëîâàðü ïàð ýëåìåíòîâ (öåëîå, öåëîå)</td></tr>
<tr><td><code><b>function</b> DictStr(<b>params</b> pairs: <b>array</b> <b>of</b> (string, string)): Dictionary&lt;string, string&gt;;</code>
@ -58,6 +63,8 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñïèñîê, çàïîëíåííûé óêàçàííûìè öåëûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> LstStr(<b>params</b> a: <b>array</b> <b>of</b> string): List&lt;string&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñïèñîê, çàïîëíåííûé óêàçàííûìè öåëûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> Pair&lt;TKey, TVal&gt;(key: TKey; value: TVal): KeyValuePair&lt;TKey, TVal&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает пару элементов (ключ, значение)</td></tr>
<tr><td><code><b>function</b> SSet&lt;T&gt;(<b>params</b> a: <b>array</b> <b>of</b> T): SortedSet&lt;T&gt;;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ìíîæåñòâî íà áàçå áèíàðíîãî äåðåâà ïîèñêà, çàïîëíåííîå óêàçàííûìè çíà÷åíèÿìè</td></tr>
<tr><td><code><b>function</b> SSet&lt;T&gt;(a: <b>sequence </b> <b>of</b> T): SortedSet&lt;T&gt;;</code>

View file

@ -14,7 +14,8 @@
<param name="Keyword" value="SeqRandom">
<param name="Keyword" value="SeqRandomInteger">
<param name="Keyword" value="SeqRandomReal">
<param name="Keyword" value="SeqWhile"></object>
<param name="Keyword" value="SeqWhile">
<param name="Keyword" value="Zip"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Подпрограммы для генерации последовательностей</H1>
<table border=0 cellpadding=5><tr><td><code><b>function</b> Iterate&lt;T&gt;(first: T; next: T-&gt;T): <b>sequence </b> <b>of</b> T;</code>
@ -81,5 +82,21 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает последовательность элементов с начальным значением first,функцией next перехода от предыдущего к следующему и условием pred продолжения последовательности</td></tr>
<tr><td><code><b>function</b> SeqWhile&lt;T&gt;(first, second: T; next: (T,T) -&gt;T; pred: T-&gt;boolean): <b>sequence </b> <b>of</b> T;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает последовательность элементов, начинающуюся с first и second,с функцией next перехода от двух предыдущих к следующему и условием pred продолжения последовательности</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1): <b>sequence </b> <b>of</b> (T, T1);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îáúåäèíÿåò äâå ïîñëåäîâàòåëüíîñòè â ïîñëåäîâàòåëüíîñòü äâóõýëåìåíòíûõ êîðòåæåé</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1, T2&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1; c: <b>sequence </b> <b>of</b> T2): <b>sequence </b> <b>of</b> (T, T1, T2);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îáúåäèíÿåò òðè ïîñëåäîâàòåëüíîñòè â ïîñëåäîâàòåëüíîñòü òðåõýëåìåíòíûõ êîðòåæåé</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1, T2, T3&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1; c: <b>sequence </b> <b>of</b> T2; d: <b>sequence </b> <b>of</b> T3): <b>sequence </b> <b>of</b> (T, T1, T2, T3);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îáúåäèíÿåò ÷åòûðå ïîñëåäîâàòåëüíîñòè â ïîñëåäîâàòåëüíîñòü ÷åòûðåõýëåìåíòíûõ êîðòåæåé</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1, T2, T3, T4&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1; c: <b>sequence </b> <b>of</b> T2; d: <b>sequence </b> <b>of</b> T3; e: <b>sequence </b> <b>of</b> T4): <b>sequence </b> <b>of</b> (T, T1, T2, T3, T4);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Îáúåäèíÿåò ïÿòü ïîñëåäîâàòåëüíîñòåé â ïîñëåäîâàòåëüíîñòü ïÿòèýëåìåíòíûõ êîðòåæåé</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1, TRes&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1; fun: (T,T1) -&gt; TRes): <b>sequence </b> <b>of</b> TRes;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðèìåíÿåò óêàçàííóþ ôóíêöèþ ê ñîîòâåòñòâóþùèì ýëåìåíòàì êîðòåæåé, âîçâðàùàåò ïîñëåäîâàòåëüíîñòü ðåçóëüòàòîâ</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1, T2, TRes&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1; c: <b>sequence </b> <b>of</b> T2; fun: (T,T1,T2) -&gt; TRes): <b>sequence </b> <b>of</b> TRes;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðèìåíÿåò óêàçàííóþ ôóíêöèþ ê ñîîòâåòñòâóþùèì ýëåìåíòàì êîðòåæåé, âîçâðàùàåò ïîñëåäîâàòåëüíîñòü ðåçóëüòàòîâ</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1, T2, T3, TRes&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1; c: <b>sequence </b> <b>of</b> T2; d: <b>sequence </b> <b>of</b> T3; fun: (T,T1,T2,T3) -&gt; TRes): <b>sequence </b> <b>of</b> TRes;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðèìåíÿåò óêàçàííóþ ôóíêöèþ ê ñîîòâåòñòâóþùèì ýëåìåíòàì êîðòåæåé, âîçâðàùàåò ïîñëåäîâàòåëüíîñòü ðåçóëüòàòîâ</td></tr>
<tr><td><code><b>function</b> Zip&lt;T, T1, T2, T3, T4, TRes&gt;(a: <b>sequence </b> <b>of</b> T; b: <b>sequence </b> <b>of</b> T1; c: <b>sequence </b> <b>of</b> T2; d: <b>sequence </b> <b>of</b> T3; e: <b>sequence </b> <b>of</b> T4; fun: (T,T1,T2,T3,T4) -&gt; TRes): <b>sequence </b> <b>of</b> TRes;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïðèìåíÿåò óêàçàííóþ ôóíêöèþ ê ñîîòâåòñòâóþùèì ýëåìåíòàì êîðòåæåé, âîçâðàùàåò ïîñëåäîâàòåëüíîñòü ðåçóëüòàòîâ</td></tr>
</table>
</body></HTML>

View file

@ -27,6 +27,7 @@
<param name="Keyword" value="PascalABCVersion">
<param name="Keyword" value="PointerToString">
<param name="Keyword" value="RemoveDir">
<param name="Keyword" value="RenameDirectory">
<param name="Keyword" value="RenameFile">
<param name="Keyword" value="RmDir">
<param name="Keyword" value="SetCurrentDir">
@ -41,17 +42,17 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выводит в специальном окне диагностическое сообщение и стек вызовов подпрограмм если условие не выполняется</td></tr>
<tr><td><code><b>function</b> ChangeFileNameExtension(fileName, newExt: string): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Изменяет расширение файла с именем fileName на newExt</td></tr>
<tr><td><code><b>procedure</b> ChDir(s: string);</code>
<tr><td><code><b>procedure</b> ChDir(dirName: string);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Меняет текущий каталог</td></tr>
<tr><td><code><b>function</b> CreateDir(s: string): boolean;</code>
<tr><td><code><b>function</b> CreateDir(dirName: string): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Создает каталог. Возвращает True, если каталог успешно создан</td></tr>
<tr><td><code><b>function</b> DeleteFile(fname: string): boolean;</code>
<tr><td><code><b>function</b> DeleteFile(fileName: string): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Удаляет файл. Если файл не может быть удален, то возвращает False</td></tr>
<tr><td><code><b>function</b> DiskFree(diskname: string): int64;</code>
<tr><td><code><b>function</b> DiskFree(diskName: string): int64;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает свободное место в байтах на диске с именем diskname</td></tr>
<tr><td><code><b>function</b> DiskFree(disk: integer): int64;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает свободное место в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д.</td></tr>
<tr><td><code><b>function</b> DiskSize(diskname: string): int64;</code>
<tr><td><code><b>function</b> DiskSize(diskName: string): int64;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает размер в байтах на диске с именем diskname</td></tr>
<tr><td><code><b>function</b> DiskSize(disk: integer): int64;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает размер в байтах на диске disk. disk=0 - текущий диск, disk=1 - диск A: , disk=2 - диск B: и т.д.</td></tr>
@ -89,7 +90,7 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает количество миллисекунд с момента начала работы программы</td></tr>
<tr><td><code><b>function</b> MillisecondsDelta: integer;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает количество миллисекунд с момента последнего вызова Milliseconds или MillisecondsDelta или начала программы</td></tr>
<tr><td><code><b>procedure</b> MkDir(s: string);</code>
<tr><td><code><b>procedure</b> MkDir(dirName: string);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Создает каталог</td></tr>
<tr><td><code><b>procedure</b> New&lt;T&gt;(<b>var</b> p: ^T);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Выделяет динамическую память размера sizeof(T) и возвращает в переменной p указатель на нее. Тип T должен быть размерным</td></tr>
@ -101,27 +102,21 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Возвращает версию PascalABC.NET</td></tr>
<tr><td><code><b>function</b> PointerToString(p: pointer): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Преобразует указатель к строковому представлению</td></tr>
<tr><td><code><b>function</b> RemoveDir(s: string): boolean;</code>
<tr><td><code><b>function</b> RemoveDir(dirName: string): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Удаляет каталог. Возвращает True, если каталог успешно удален</td></tr>
<tr><td><code><b>function</b> RenameDirectory(dirName, newDirName: string): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ïåðåèìåíîâûâàåò êàòàëîã dirName, äàâàÿ åìó íîâîå èìÿ newDirName. Âîçâðàùàåò True, åñëè êàòàëîã óñïåøíî ïåðåèìåíîâàí</td></tr>
<tr><td><code><b>function</b> RenameFile(fileName, newfileName: string): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Переименовывает файл fileName, давая ему новое имя newfileName. Возвращает True, если файл успешно переименован</td></tr>
<tr><td><code><b>procedure</b> RmDir(s: string);</code>
<tr><td><code><b>procedure</b> RmDir(dirName: string);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Удаляет каталог</td></tr>
<tr><td><code><b>function</b> SetCurrentDir(s: string): boolean;</code>
<tr><td><code><b>function</b> SetCurrentDir(dirName: string): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Устанавливает текущий каталог. Возвращает True, если каталог успешно удален</td></tr>
<tr><td><code><b>procedure</b> Sleep(ms: integer);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Делает паузу на ms миллисекунд</td></tr>
<tr><td><code><b>function</b> TypeName(o: object): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò èìÿ òèïà îáúåêòà</td></tr>
<tr><td><code><b>procedure</b> TypeName(o: object; res: StringBuilder);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Çàïèñûâàåò â res èìÿ òèïà îáúåêòà</td></tr>
<tr><td><code><b>procedure</b> TypeName(o: object; res: TextWriter);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Çàïèñûâàåò â res èìÿ òèïà îáúåêòà</td></tr>
<tr><td><code><b>function</b> TypeName(obj: object): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñòðîêó ñ èìåíåì òèïà îáúåêòà</td></tr>
<tr><td><code><b>function</b> TypeToTypeName(t: System.Type): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äëÿ òèïà System.Type âîçâðàùàåò èìÿ òèïà îáúåêòà</td></tr>
<tr><td><code><b>procedure</b> TypeToTypeName(t: System.Type; res: StringBuilder);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äëÿ òèïà System.Type çàïèñûâàåò â res èìÿ òèïà îáúåêòà</td></tr>
<tr><td><code><b>procedure</b> TypeToTypeName(t: System.Type; res: TextWriter);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äëÿ òèïà System.Type çàïèñûâàåò â res èìÿ òèïà îáúåêòà</td></tr>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñòðîêó ñ èìåíåì äàííîãî òèïà</td></tr>
</table>
</body></HTML>

View file

@ -1 +1 @@
3.9.0.3517
3.9.0.3520

View file

@ -1 +1 @@
!define VERSION '3.9.0.3517'
!define VERSION '3.9.0.3520'

View file

@ -2278,6 +2278,40 @@ function SeqWhile<T>(first, second: T; next: (T,T) ->T; pred: T->boolean): seque
function SeqFill<T>(count: integer; x: T): sequence of T;
/// Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальным элементом first и функцией next
function Iterate<T>(first: T; next: T->T): sequence of T;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function Zip<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1);
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function Zip<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3);
/// Объединяет пять последовательностей в последовательность пятиэлементных кортежей
function Zip<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4);
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, TRes>(a: sequence of T; b: sequence of T1; fun: (T,T1) -> TRes): sequence of TRes;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; fun: (T,T1,T2) -> TRes): sequence of TRes;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; fun: (T,T1,T2,T3) -> TRes): sequence of TRes;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; fun: (T,T1,T2,T3,T4) -> TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, TRes>(a: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую тройку на значение
function Cartesian<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую четвёрку на значение
function Cartesian<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую пятёрку на значение
function Cartesian<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1);
/// Возвращает декартово произведение последовательностей в виде последовательности троек
function Cartesian<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2);
/// Возвращает декартово произведение последовательностей в виде последовательности четвёрок
function Cartesian<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3);
/// Возвращает декартово произведение последовательностей в виде последовательности пятёрок
function Cartesian<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4);
/// Возвращает последовательность из n целых, введенных с клавиатуры
function ReadSeqInteger(n: integer): sequence of integer;
@ -5372,6 +5406,119 @@ begin
end;
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, TRes>(a: sequence of T; b: sequence of T1; fun: (T,T1) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
while aen.MoveNext and ben.MoveNext do
yield fun(aen.Current,ben.Current)
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; fun: (T,T1,T2) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
var cen := c.GetEnumerator;
while aen.MoveNext and ben.MoveNext and cen.MoveNext do
yield fun(aen.Current,ben.Current,cen.Current)
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; fun: (T,T1,T2,T3) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
var cen := c.GetEnumerator;
var den := d.GetEnumerator;
while aen.MoveNext and ben.MoveNext and cen.MoveNext and den.MoveNext do
yield fun(aen.Current,ben.Current,cen.Current,den.Current)
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; fun: (T,T1,T2,T3,T4) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
var cen := c.GetEnumerator;
var den := d.GetEnumerator;
var een := e.GetEnumerator;
while aen.MoveNext and ben.MoveNext and cen.MoveNext and den.MoveNext and een.MoveNext do
yield fun(aen.Current,ben.Current,cen.Current,den.Current,een.Current)
end;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function Zip<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1)
:= Zip(a,b,(ax,bx) -> (ax,bx));
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function Zip<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2)
:= Zip(a,b,c,(ax,bx,cx) -> (ax,bx,cx));
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3)
:= Zip(a,b,c,d,(ax,bx,cx,dx) -> (ax,bx,cx,dx));
/// Объединяет пять последовательностей в последовательность пятиэлементных кортежей
function Zip<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4)
:= Zip(a,b,c,d,e,(ax,bx,cx,dx,ex) -> (ax,bx,cx,dx,ex));
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, TRes>(a: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
yield func(xa, xb)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую тройку на значение
function Cartesian<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
foreach var xc in c do
yield func(xa, xb, xc)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую четвёрку на значение
function Cartesian<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
foreach var xc in c do
foreach var xd in d do
yield func(xa, xb, xc, xd)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую пятёрку на значение
function Cartesian<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
foreach var xc in c do
foreach var xd in d do
foreach var xe in e do
yield func(xa, xb, xc, xd, xe)
end;
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1)
:= Cartesian(a,b,(xa,xb) -> (xa,xb));
/// Возвращает декартово произведение последовательностей в виде последовательности троек
function Cartesian<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2)
:= Cartesian(a,b,c,(xa,xb,xc) -> (xa,xb,xc));
/// Возвращает декартово произведение последовательностей в виде последовательности четвёрок
function Cartesian<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3)
:= Cartesian(a,b,c,d,(xa,xb,xc,xd) -> (xa,xb,xc,xd));
/// Возвращает декартово произведение последовательностей в виде последовательности пятёрок
function Cartesian<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4)
:= Cartesian(a,b,c,d,e,(xa,xb,xc,xd,xe) -> (xa,xb,xc,xd,xe));
function SeqGen<T>(count: integer; first: T; next: T->T): sequence of T;
begin
if count < 1 then
@ -10700,7 +10847,7 @@ begin
end;
end;
/// Возвращает сумму элементов последовательности, спроектированных на числовое значение - пока не работает для Lst(1,2,3)
// Возвращает сумму элементов последовательности, спроектированных на числовое значение - пока не работает для Lst(1,2,3)
{function Sum<T>(Self: sequence of T; f: T->BigInteger): BigInteger; extensionmethod;
begin
Result := 0;
@ -10797,6 +10944,7 @@ end;
// Дополнения февраль 2016: MinBy, MaxBy, TakeLast, Slice, Cartesian, SplitAt,
// Partition, ZipTuple, UnZipTuple, Interleave, Numerate, Tabulate, Pairwise, Batch
// Дополнения 2024: Zip - синоним ZipTuple
/// Возвращает первый элемент последовательности с минимальным значением ключа
function MinBy<T, TKey>(Self: sequence of T; selector: T->TKey): T; extensionmethod;
@ -10912,28 +11060,6 @@ begin
Result := Self.Reverse.Skip(count).Reverse;
end;
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod;
begin
if b = nil then
raise new System.ArgumentNullException('b');
foreach var x in Self do
foreach var y in b do
yield (x, y)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, T2>(Self: sequence of T; b: sequence of T1; func: (T,T1)->T2): sequence of T2; extensionmethod;
begin
if b = nil then
raise new System.ArgumentNullException('b');
foreach var x in Self do
foreach var y in b do
yield func(x, y)
end;
/// Разбивает последовательность на две в позиции ind. Реализуется двухпроходным алгоритмом
function SplitAt<T>(Self: sequence of T; ind: integer): (sequence of T, sequence of T); extensionmethod;
begin
@ -10956,65 +11082,86 @@ begin
Result := (Self.Where(cond), Self.Where((x, i) -> not cond(x, i)));
end;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function ZipTuple<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
Result := Self.Zip(a, (x, y) -> (x, y));
end;
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function ZipTuple<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
Result := Self.Zip(a, (x, y) -> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z));
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2) -> TRes): sequence of TRes; extensionmethod
:= Zip(Self,b,c,func);
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3) -> TRes): sequence of TRes; extensionmethod
:= Zip(Self,b,c,d,func);
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, T4, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4) -> TRes): sequence of TRes; extensionmethod
:= Zip(Self,b,c,d,e,func);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
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); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
if c = nil then
raise new System.ArgumentNullException('c');
Result := Self.Zip(a, (x, y)-> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z)).Zip(c, (p, z) -> (p[0], p[1], p[2], z));
end;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function Zip<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
Result := Self.Zip(a, (x, y) -> (x, y));
end;
function Zip<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod
:= Zip(Self,b);
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function Zip<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
Result := Self.Zip(a, (x, y) -> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z));
end;
function Zip<T, T1, T2>(Self: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); extensionmethod
:= Zip(Self,b,c);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<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); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
if c = nil then
raise new System.ArgumentNullException('c');
Result := Self.Zip(a, (x, y) -> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z)).Zip(c, (p, z) -> (p[0], p[1], p[2], z));
end;
function Zip<T, T1, T2, T3>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); extensionmethod
:= Zip(Self,b,c,d);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<T, T1, T2, T3, T4>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); extensionmethod
:= Zip(Self,b,c,d,e);
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, TRes>(Self: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,func);
/// Возвращает декартово произведение последовательностей, проектируя каждую тройку на значение
function Cartesian<T, T1, T2, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,c,func);
/// Возвращает декартово произведение последовательностей, проектируя каждую четвёрку на значение
function Cartesian<T, T1, T2, T3, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,c,d,func);
/// Возвращает декартово произведение последовательностей, проектируя каждую пятёрку на значение
function Cartesian<T, T1, T2, T3, T4, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,c,d,e,func);
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod
:= Cartesian(Self,b);
/// Возвращает декартово произведение последовательностей в виде последовательности троек
function Cartesian<T, T1, T2>(Self: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); extensionmethod
:= Cartesian(Self,b,c);
/// Возвращает декартово произведение последовательностей в виде последовательности четвёрок
function Cartesian<T, T1, T2, T3>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); extensionmethod
:= Cartesian(Self,b,c,d);
/// Возвращает декартово произведение последовательностей в виде последовательности пятёрок
function Cartesian<T, T1, T2, T3, T4>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); extensionmethod
:= Cartesian(Self,b,c,d,e);
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function ZipTuple<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1); extensionmethod
:= Self.Zip(a);
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function ZipTuple<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2); extensionmethod
:= Self.Zip(a,b);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
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); extensionmethod
:= Self.Zip(a,b,c);
/// Разъединяет последовательность двухэлементных кортежей на две последовательности. Реализуется двухпроходным алгоритмом
function UnZipTuple<T, T1>(Self: sequence of (T, T1)): (sequence of T, sequence of T1); extensionmethod;

View file

@ -2278,6 +2278,40 @@ function SeqWhile<T>(first, second: T; next: (T,T) ->T; pred: T->boolean): seque
function SeqFill<T>(count: integer; x: T): sequence of T;
/// Возвращает бесконечную рекуррентную последовательность элементов, задаваемую начальным элементом first и функцией next
function Iterate<T>(first: T; next: T->T): sequence of T;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function Zip<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1);
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function Zip<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3);
/// Объединяет пять последовательностей в последовательность пятиэлементных кортежей
function Zip<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4);
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, TRes>(a: sequence of T; b: sequence of T1; fun: (T,T1) -> TRes): sequence of TRes;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; fun: (T,T1,T2) -> TRes): sequence of TRes;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; fun: (T,T1,T2,T3) -> TRes): sequence of TRes;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; fun: (T,T1,T2,T3,T4) -> TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, TRes>(a: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую тройку на значение
function Cartesian<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую четвёрку на значение
function Cartesian<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей, проектируя каждую пятёрку на значение
function Cartesian<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes;
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1);
/// Возвращает декартово произведение последовательностей в виде последовательности троек
function Cartesian<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2);
/// Возвращает декартово произведение последовательностей в виде последовательности четвёрок
function Cartesian<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3);
/// Возвращает декартово произведение последовательностей в виде последовательности пятёрок
function Cartesian<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4);
/// Возвращает последовательность из n целых, введенных с клавиатуры
function ReadSeqInteger(n: integer): sequence of integer;
@ -5372,6 +5406,119 @@ begin
end;
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, TRes>(a: sequence of T; b: sequence of T1; fun: (T,T1) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
while aen.MoveNext and ben.MoveNext do
yield fun(aen.Current,ben.Current)
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; fun: (T,T1,T2) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
var cen := c.GetEnumerator;
while aen.MoveNext and ben.MoveNext and cen.MoveNext do
yield fun(aen.Current,ben.Current,cen.Current)
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; fun: (T,T1,T2,T3) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
var cen := c.GetEnumerator;
var den := d.GetEnumerator;
while aen.MoveNext and ben.MoveNext and cen.MoveNext and den.MoveNext do
yield fun(aen.Current,ben.Current,cen.Current,den.Current)
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; fun: (T,T1,T2,T3,T4) -> TRes): sequence of TRes;
begin
var aen := a.GetEnumerator;
var ben := b.GetEnumerator;
var cen := c.GetEnumerator;
var den := d.GetEnumerator;
var een := e.GetEnumerator;
while aen.MoveNext and ben.MoveNext and cen.MoveNext and den.MoveNext and een.MoveNext do
yield fun(aen.Current,ben.Current,cen.Current,den.Current,een.Current)
end;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function Zip<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1)
:= Zip(a,b,(ax,bx) -> (ax,bx));
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function Zip<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2)
:= Zip(a,b,c,(ax,bx,cx) -> (ax,bx,cx));
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3)
:= Zip(a,b,c,d,(ax,bx,cx,dx) -> (ax,bx,cx,dx));
/// Объединяет пять последовательностей в последовательность пятиэлементных кортежей
function Zip<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4)
:= Zip(a,b,c,d,e,(ax,bx,cx,dx,ex) -> (ax,bx,cx,dx,ex));
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, TRes>(a: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
yield func(xa, xb)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую тройку на значение
function Cartesian<T, T1, T2, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
foreach var xc in c do
yield func(xa, xb, xc)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую четвёрку на значение
function Cartesian<T, T1, T2, T3, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
foreach var xc in c do
foreach var xd in d do
yield func(xa, xb, xc, xd)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую пятёрку на значение
function Cartesian<T, T1, T2, T3, T4, TRes>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes;
begin
foreach var xa in a do
foreach var xb in b do
foreach var xc in c do
foreach var xd in d do
foreach var xe in e do
yield func(xa, xb, xc, xd, xe)
end;
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(a: sequence of T; b: sequence of T1): sequence of (T, T1)
:= Cartesian(a,b,(xa,xb) -> (xa,xb));
/// Возвращает декартово произведение последовательностей в виде последовательности троек
function Cartesian<T, T1, T2>(a: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2)
:= Cartesian(a,b,c,(xa,xb,xc) -> (xa,xb,xc));
/// Возвращает декартово произведение последовательностей в виде последовательности четвёрок
function Cartesian<T, T1, T2, T3>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3)
:= Cartesian(a,b,c,d,(xa,xb,xc,xd) -> (xa,xb,xc,xd));
/// Возвращает декартово произведение последовательностей в виде последовательности пятёрок
function Cartesian<T, T1, T2, T3, T4>(a: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4)
:= Cartesian(a,b,c,d,e,(xa,xb,xc,xd,xe) -> (xa,xb,xc,xd,xe));
function SeqGen<T>(count: integer; first: T; next: T->T): sequence of T;
begin
if count < 1 then
@ -10700,7 +10847,7 @@ begin
end;
end;
/// Возвращает сумму элементов последовательности, спроектированных на числовое значение - пока не работает для Lst(1,2,3)
// Возвращает сумму элементов последовательности, спроектированных на числовое значение - пока не работает для Lst(1,2,3)
{function Sum<T>(Self: sequence of T; f: T->BigInteger): BigInteger; extensionmethod;
begin
Result := 0;
@ -10797,6 +10944,7 @@ end;
// Дополнения февраль 2016: MinBy, MaxBy, TakeLast, Slice, Cartesian, SplitAt,
// Partition, ZipTuple, UnZipTuple, Interleave, Numerate, Tabulate, Pairwise, Batch
// Дополнения 2024: Zip - синоним ZipTuple
/// Возвращает первый элемент последовательности с минимальным значением ключа
function MinBy<T, TKey>(Self: sequence of T; selector: T->TKey): T; extensionmethod;
@ -10912,28 +11060,6 @@ begin
Result := Self.Reverse.Skip(count).Reverse;
end;
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod;
begin
if b = nil then
raise new System.ArgumentNullException('b');
foreach var x in Self do
foreach var y in b do
yield (x, y)
end;
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, T2>(Self: sequence of T; b: sequence of T1; func: (T,T1)->T2): sequence of T2; extensionmethod;
begin
if b = nil then
raise new System.ArgumentNullException('b');
foreach var x in Self do
foreach var y in b do
yield func(x, y)
end;
/// Разбивает последовательность на две в позиции ind. Реализуется двухпроходным алгоритмом
function SplitAt<T>(Self: sequence of T; ind: integer): (sequence of T, sequence of T); extensionmethod;
begin
@ -10956,65 +11082,86 @@ begin
Result := (Self.Where(cond), Self.Where((x, i) -> not cond(x, i)));
end;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function ZipTuple<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
Result := Self.Zip(a, (x, y) -> (x, y));
end;
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function ZipTuple<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
Result := Self.Zip(a, (x, y) -> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z));
end;
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2) -> TRes): sequence of TRes; extensionmethod
:= Zip(Self,b,c,func);
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3) -> TRes): sequence of TRes; extensionmethod
:= Zip(Self,b,c,d,func);
/// Применяет указанную функцию к соответствующим элементам кортежей, возвращает последовательность результатов
function Zip<T, T1, T2, T3, T4, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4) -> TRes): sequence of TRes; extensionmethod
:= Zip(Self,b,c,d,e,func);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
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); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
if c = nil then
raise new System.ArgumentNullException('c');
Result := Self.Zip(a, (x, y)-> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z)).Zip(c, (p, z) -> (p[0], p[1], p[2], z));
end;
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function Zip<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
Result := Self.Zip(a, (x, y) -> (x, y));
end;
function Zip<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod
:= Zip(Self,b);
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function Zip<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
Result := Self.Zip(a, (x, y) -> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z));
end;
function Zip<T, T1, T2>(Self: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); extensionmethod
:= Zip(Self,b,c);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<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); extensionmethod;
begin
if a = nil then
raise new System.ArgumentNullException('a');
if b = nil then
raise new System.ArgumentNullException('b');
if c = nil then
raise new System.ArgumentNullException('c');
Result := Self.Zip(a, (x, y) -> (x, y)).Zip(b, (p, z) -> (p[0], p[1], z)).Zip(c, (p, z) -> (p[0], p[1], p[2], z));
end;
function Zip<T, T1, T2, T3>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); extensionmethod
:= Zip(Self,b,c,d);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
function Zip<T, T1, T2, T3, T4>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); extensionmethod
:= Zip(Self,b,c,d,e);
/// Возвращает декартово произведение последовательностей, проектируя каждую пару на значение
function Cartesian<T, T1, TRes>(Self: sequence of T; b: sequence of T1; func: (T,T1)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,func);
/// Возвращает декартово произведение последовательностей, проектируя каждую тройку на значение
function Cartesian<T, T1, T2, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; func: (T,T1,T2)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,c,func);
/// Возвращает декартово произведение последовательностей, проектируя каждую четвёрку на значение
function Cartesian<T, T1, T2, T3, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; func: (T,T1,T2,T3)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,c,d,func);
/// Возвращает декартово произведение последовательностей, проектируя каждую пятёрку на значение
function Cartesian<T, T1, T2, T3, T4, TRes>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4; func: (T,T1,T2,T3,T4)->TRes): sequence of TRes; extensionmethod
:= Cartesian(Self,b,c,d,e,func);
/// Возвращает декартово произведение последовательностей в виде последовательности пар
function Cartesian<T, T1>(Self: sequence of T; b: sequence of T1): sequence of (T, T1); extensionmethod
:= Cartesian(Self,b);
/// Возвращает декартово произведение последовательностей в виде последовательности троек
function Cartesian<T, T1, T2>(Self: sequence of T; b: sequence of T1; c: sequence of T2): sequence of (T, T1, T2); extensionmethod
:= Cartesian(Self,b,c);
/// Возвращает декартово произведение последовательностей в виде последовательности четвёрок
function Cartesian<T, T1, T2, T3>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3): sequence of (T, T1, T2, T3); extensionmethod
:= Cartesian(Self,b,c,d);
/// Возвращает декартово произведение последовательностей в виде последовательности пятёрок
function Cartesian<T, T1, T2, T3, T4>(Self: sequence of T; b: sequence of T1; c: sequence of T2; d: sequence of T3; e: sequence of T4): sequence of (T, T1, T2, T3, T4); extensionmethod
:= Cartesian(Self,b,c,d,e);
/// Объединяет две последовательности в последовательность двухэлементных кортежей
function ZipTuple<T, T1>(Self: sequence of T; a: sequence of T1): sequence of (T, T1); extensionmethod
:= Self.Zip(a);
/// Объединяет три последовательности в последовательность трехэлементных кортежей
function ZipTuple<T, T1, T2>(Self: sequence of T; a: sequence of T1; b: sequence of T2): sequence of (T, T1, T2); extensionmethod
:= Self.Zip(a,b);
/// Объединяет четыре последовательности в последовательность четырехэлементных кортежей
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); extensionmethod
:= Self.Zip(a,b,c);
/// Разъединяет последовательность двухэлементных кортежей на две последовательности. Реализуется двухпроходным алгоритмом
function UnZipTuple<T, T1>(Self: sequence of (T, T1)): (sequence of T, sequence of T1); extensionmethod;

Binary file not shown.