2003-10-09 (Thu) [長年日記]
_ イテレータ(Sather)
イテレータを実装。以下のようなコードが動くようになった。
class MAIN is
upto!(once from: INT, once to: INT): INT is
i ::= from;
loop
while!(i <= to);
yield i;
i := i + 1;
end;
end;
sum!(i: INT): INT is
r ::= 0;
loop
r := r + i;
yield r;
end;
end;
product!(i: INT): INT is
r ::= 1;
loop
r := r * i;
yield r;
end;
end;
main is
sum: INT;
product: INT;
loop
i ::= upto!(1, 10);
#OUT + "i=" + i + "\n";
sum := sum!(i);
product := product!(i);
end;
#OUT + "sum=" + sum + "\n";
#OUT + "product=" + product + "\n";
end;
end;
実行結果は以下の通り。
i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10 sum=55 product=3628800
[ツッコミを入れる]