タグ

javaと遅延リストに関するkamatama_41のブックマーク (2)

  • 遅延評価いうなキャンペーンとかどうか - ぐるぐる~

    遅延評価については以前も書いてるんですが、そのときは結論なしでした。 が、ちょっと考えるところがあって、言語を Java に絞って自分の考えを明確にしておきます。 結論から書きましょう。 「Java(とC#) で遅延評価って書いてあるものは遅延評価ではない」です。 Java における「評価」とは まず一番最初に、Java で「評価」って言うと、どういうことを指すのかを確認しておきます。 言語仕様の該当部分を要約すると、こんな感じでしょうか。 プログラム中の式を評価すると、結果は 変数 値 無し のうちのどれかとなる。 評価した結果が値になる、というのはいいでしょう。それ以外の 2 つを軽く説明します。 評価の結果が「変数」とは? コメント欄で指摘が入っています。 代入の結果は変数ではありません(15.26)。 結果が変数となるのは、ローカル変数、現在のオブジェクトやクラスの変数、フィールド

    kamatama_41
    kamatama_41 2013/01/06
    『そう、stream2 はこの時点ではまだ、stream をフィルタしておらず、「フィルタすることを予約した」とでも言うべき状態なのです。』
  • Javaでリスト生成遅延 - コンピュータってすごいらしい

    動機 必要なだけ要素が作られる無限リストを生成したい。 元ネタ Haskellを使う人に有名なフィボナッチ数列の生成方法がある。 fib = 0:1:zipWith (+) fib (tail fib)これで無限に続くフィボナッチ数列ができる。 Haskellのよいところは、遅延評価(lazy evaluation)なので n番目が必要になるまで、n番目が計算されないこと。 これをJavaでやりたい。 方針 (5/9更新) 「必要なだけ」といいながら1個先回りして作っていることに気づいた。 暇があったら改善しよう。 iterator.next()が最初に呼ばれた時に次の要素を生成するようにする。 そこで、リストの次の要素を計算するメソッドnextValueと、次のラッパーオブジェクト生成getInstanceをもつ、Iterableな抽象クラスLazyListを用意する。 iterator

    Javaでリスト生成遅延 - コンピュータってすごいらしい
  • 1