Оператор yield sequence
Оператор yield sequence используется в функциях, генерирующих последовательности, вместе с оператором yield, и имеет вид:
yield sequence
выражение
В отличие от оператора yield, оператор yield sequence перебирает элементы последовательности, указанной в выражении и возвращает эти элементы в качестве значений основной функции-итератора. Например, следующий код:
function f: sequence of real;
begin
yield sequence Seq(1,2,3);
yield 4;
end;
begin
f.Println;
end.
выведет последовательность
1 2 3 4
Следующий пример иллюстрирует формирование последовательности элементов при обходе бинарного дерева в инфиксном порядке:
function InfixPrintTree<T>(root: Node<T>): sequence of T;
begin
if root = nil then exit;
yield sequence InfixPrintTree(root.left);
yield root.data;
yield sequence InfixPrintTree(root.right);
end;
Для функций, в теле которых присутствуют yield sequence, действуют те же ограничения, что и для функций с yield.