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
[ツッコミを入れる]
