平素は株式会社ライブドアのサービスを ご利用いただきありがとうございます。 提言型ニュースサイト「BLOGOS」は、 2022年5月31日をもちまして、 サービスの提供を終了いたしました。 一部のオリジナル記事につきましては、 livedoorニュース内の 「BLOGOSの記事一覧」からご覧いただけます。 長らくご利用いただき、ありがとうございました。 サービス終了に関するお問い合わせは、 下記までお願いいたします。 お問い合わせ
遅延評価については以前も書いてるんですが、そのときは結論なしでした。 が、ちょっと考えるところがあって、言語を Java に絞って自分の考えを明確にしておきます。 結論から書きましょう。 「Java(とC#) で遅延評価って書いてあるものは遅延評価ではない」です。 Java における「評価」とは まず一番最初に、Java で「評価」って言うと、どういうことを指すのかを確認しておきます。 言語仕様の該当部分を要約すると、こんな感じでしょうか。 プログラム中の式を評価すると、結果は 変数 値 無し のうちのどれかとなる。 評価した結果が値になる、というのはいいでしょう。それ以外の 2 つを軽く説明します。 評価の結果が「変数」とは? コメント欄で指摘が入っています。 代入の結果は変数ではありません(15.26)。 結果が変数となるのは、ローカル変数、現在のオブジェクトやクラスの変数、フィールド
動機 必要なだけ要素が作られる無限リストを生成したい。 元ネタ Haskellを使う人に有名なフィボナッチ数列の生成方法がある。 fib = 0:1:zipWith (+) fib (tail fib)これで無限に続くフィボナッチ数列ができる。 Haskellのよいところは、遅延評価(lazy evaluation)なので n番目が必要になるまで、n番目が計算されないこと。 これをJavaでやりたい。 方針 (5/9更新) 「必要なだけ」といいながら1個先回りして作っていることに気づいた。 暇があったら改善しよう。 iterator.next()が最初に呼ばれた時に次の要素を生成するようにする。 そこで、リストの次の要素を計算するメソッドnextValueと、次のラッパーオブジェクト生成getInstanceをもつ、Iterableな抽象クラスLazyListを用意する。 iterator
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く