function Range(const Start, Stop, Step: integer): Enumerable<integer>;
begin
result :=
YieldingEnumerble<integer>.Create(
procedure(const Yield: YieldProc<integer>)
var
i: integer;
begin
i := Start;
while (i < Stop) do
begin
Yield(i);
i := i + Step;
end;
end
);
end;