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;