pascalabcnet/InstallerSamples/LanguageFeatures/ForeachIEnumerable.pas

51 lines
963 B
ObjectPascal
Raw Normal View History

2015-05-14 22:35:07 +03:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> IEnumerable
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> foreach
uses System.Collections;
type
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FibGen = class(IEnumerable, IEnumerator)
private
a,b,n,i: integer;
public
constructor Create(n: integer);
begin
i := -1;
a := 0;
b := 1;
Self.n := n;
end;
function Get_Current: Object;
begin
if i=0 then
Result := 1
else Result := b;
end;
function GetEnumerator: IEnumerator;
begin
Result := Self;
end;
function MoveNext: boolean;
begin
i += 1;
Result := i<n;
if i=0 then exit;
var c := a + b;
a := b;
b := c;
end;
property Current: Object read Get_Current;
procedure Reset;
begin
i := -1;
end;
end;
var f: FibGen;
begin
writeln('<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>');
f := new FibGen(25);
foreach var x in f do
write(x,' ');
end.