PascalABC.NET

Оператор 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.