タグ

Javaとevalに関するkiyo_hikoのブックマーク (2)

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

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

  • Java で遅延評価式を実装する。 - にょきにょきブログ

    Java は先行評価式の言語であるが、遅延評価を行えるよう遅延評価式の実装を行う。 遅延評価はサンク( Thunk, 遅延評価 - Wikipedia ) と呼ばれ、値が必要になった時点で計算をする。 要件 式を表す事ができること 値を表すことができること 遅延評価が出来る事 eval メソッドで評価ができること 以下の演算を行える事 Add (加算) Multiply (乗算) Div (除算) Pow (冪乗) Mod (剰余) 使い方は最後に載せようと思ったが、記事がやけに長くなったのでここでお披露目する。 を表すサンクを作る。 public static void main(String[] args) { // (2+7)^31 を表すサンクを生成 Thunk t1 = new Thunk(2).add(7).pow(31); // (3*7)^2 を表すサンクを生成 Thunk

    Java で遅延評価式を実装する。 - にょきにょきブログ
  • 1