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