トップ «前の日記(2003-10-06 (Mon)) 最新 次の日記(2003-10-13 (Mon))» 編集   RSS 1.0 FEED  

Journal InTime


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