タグ

ブックマーク / koyachi.hatenadiary.org (2)

  • Iterator,Closure v.s. OOP - koyachiの日記

    イテレータはオブジェクトインターフェースの一つで、nextメソッド等でオブジェクトが保持する次の要素を必要な時に取得することができるものです。リスト自体が巨大であったり、リストの生成に時間がかかる場合や、必要となるリストや要素についての情報がわからない場合に、必要量だけ取得できるのがイテレータの利点です。 最小値と最大値を指定されたリストを生成し、イテレータで順にその値を取得するオブジェクトの実装について考えてみます。 my $it = upto(7, 11); $n = NEXTVAL( $it ); # $n == 7 push @a, NEXTVAL( $it ) for 1..3; # @a == (8,9,10) $x = NEXTVAL( $it ); # $x == 11 # この時点で$it == undefined unless (defined NEXTVAL( $it

    Iterator,Closure v.s. OOP - koyachiの日記
    hakobe932
    hakobe932 2006/07/13
    クロージャかっこいい!
  • Table,Caching,Memoize,Closure,Profiler - koyachiの日記

    入力に対して決まった値を返し、入力値のレンジが広く、何度も値を取得する必要がある場合、Cなんかでは初期化時に全入力値に対する結果を保持するテーブルを生成したりします。速度重視する場合のsinテーブルとか。割と制約がシビアでない環境では、新しい入力パラメタが与えられるたびに値を保存する関数でもいいと思います。 my %cache; sub fast_sin { return $cache{ $_[0] } if exists $cache{ $_[0] }; $cache{ $_[0] } = sin( $_[0] ); }PerlのMemoizeモジュールや、JSANのMemoizeモジュールを使うとこのキャッシング機能を毎回書く必要がなくなります。Perlの場合は、 use Memoize; memoize 'sin';とするだけでsin関数にキャッシュ機構が組込まれます。 Perlでの

    Table,Caching,Memoize,Closure,Profiler - koyachiの日記
  • 1