タグ付けされた質問 「lazy-evaluation」

遅延評価とは、値が必要でない限り式の評価を回避し、式の評価結果をすべての使用で共有することで、式を複数回評価する必要がないようにするさまざまな概念を指します。

28
node.jsで一度に1行ずつファイルを読み取りますか?
大きなファイルを1行ずつ読み込もうとしています。この問題を扱ったQuoraに関する質問を見つけましたが、全体を一致させるためにいくつかの接続がありません。 var Lazy=require("lazy"); new Lazy(process.stdin) .lines .forEach( function(line) { console.log(line.toString()); } ); process.stdin.resume(); このサンプルのように、STDINではなくファイルから一度に1行ずつ読み取る方法を理解したいと思います。 私は試した: fs.open('./VeryBigFile.csv', 'r', '0666', Process); function Process(err, fd) { if (err) throw err; // DO lazy read } しかし、それは機能していません。私はピンチでPHPのようなものにフォールバックできることを知っていますが、これを理解したいと思います。 私が実行しているサーバーがメモリを持っているサーバーよりもファイルが非常に大きいため、他の答えはうまくいかないと思います。

7
いつLazy <T>を使用すればよいですか?
私はこの記事を見つけましたLazy:C#4.0での怠惰– Lazy レイジーオブジェクトを使用して最高のパフォーマンスを実現するためのベストプラクティスは何ですか?誰かが実際のアプリケーションでの実用的な使用を私に指摘できますか?つまり、いつ使用すればよいですか。
327 c#  .net  lazy-evaluation 


7
怠惰なvalは何をしますか?
Scalaが提供してlazy valsいることに気づきました。しかし、私は彼らが何をするのかわかりません。 scala&gt; val x = 15 x: Int = 15 scala&gt; lazy val y = 13 y: Int = &lt;lazy&gt; scala&gt; x res0: Int = 15 scala&gt; y res1: Int = 13 REPLのショーyですlazy valが、どのようにそれは通常と異なっていますかval?

7
dplyr tbl列をベクトルとして抽出する
データベースのバックエンドを持つtblから、dplyr tblの1つの列をベクトルとして取得するより簡単な方法はありますか(つまり、データフレーム/テーブルは直接サブセット化できません)。 require(dplyr) db &lt;- src_sqlite(tempfile(), create = TRUE) iris2 &lt;- copy_to(db, iris) iris2$Species # NULL それは簡単すぎるので、 collect(select(iris2, Species))[, 1] # [1] "setosa" "setosa" "setosa" "setosa" etc. しかし、それは少し不器用に思えます。

6
Scalaのレイジーバリューの(隠された)コストはいくらですか?
Scalaの便利な機能の1つはですlazy val。この機能では、val(最初のアクセス時に)必要になるまでaの評価が遅延されます。 もちろん、aにlazy valは多少のオーバーヘッドが必要です。複数のスレッドが初めて値に同時にアクセスしようとする可能性があるため、Scalaは値がすでに評価されているかどうかを追跡し、評価を同期する必要があります。 正確には何のコストですか?評価されているかどうかを追跡するためににlazy val関連付けられている非表示のブールフラグlazy valはありますか?正確に同期されているものはありますか?それ以上のコストはありますか? さらに、私がこれを行うと仮定します: class Something { lazy val (x, y) = { ... } } これは、2つの別個lazy valのを持っているのと同じですかx、yまたはペアのオーバーヘッドを1回だけ取得します(x, y)か?

14
JDK8とラムダ(java.util.stream.Streams.zip)を使用したスト​​リームの圧縮
ラムダb93を使用するJDK 8では、ストリームを圧縮するために使用できるクラスjava.util.stream.Streams.zipがb93にありました(これは、チュートリアル「Java8ラムダを探索する」で説明されています。DhananjayNeneによるパート1)。この機能: 2つのストリームの要素を組み合わせた結果を要素とする、レイジーで順次結合されたStreamを作成します。 ただし、b98ではこれがなくなりました。実際には、Streamsクラスはb98のjava.util.streamでさえアクセスできません。 この機能は移動されましたか。移動されている場合、b98を使用してストリームを簡潔に圧縮するにはどうすればよいですか? 私が考えているアプリケーションは、このShenのJava実装にあります。 static &lt;T&gt; boolean every(Collection&lt;T&gt; c1, Collection&lt;T&gt; c2, BiPredicate&lt;T, T&gt; pred) static &lt;T&gt; T find(Collection&lt;T&gt; c1, Collection&lt;T&gt; c2, BiPredicate&lt;T, T&gt; pred) (b98の機能を使用しない)かなり冗長なコードで機能します。

9
字句閉鎖はどのように機能しますか?
私はJavascriptコードの字句クロージャーで発生した問題を調査していたところ、Pythonでこの問題に遭遇しました。 flist = [] for i in xrange(3): def func(x): return x * i flist.append(func) for f in flist: print f(2) この例では注意深く回避していlambdaます。意外と「4 4 4」と印刷されます。「0 2 4」を期待します。 この同等のPerlコードはそれを正しく行います: my @flist = (); foreach my $i (0 .. 2) { push(@flist, sub {$i * $_[0]}); } foreach my $f (@flist) { print …

4
無限リストでのfoldlとfoldrの動作
この質問の myAny関数のコードでは、foldrを使用しています。述語が満たされると、無限リストの処理を停止します。 私はfoldlを使って書き直しました: myAny :: (a -&gt; Bool) -&gt; [a] -&gt; Bool myAny p list = foldl step False list where step acc item = p item || acc (step関数への引数は正しく逆になっていることに注意してください。) ただし、無限リストの処理を停止しなくなりました。 私はApocalispの答えのように関数の実行を追跡しようとしました: myAny even [1..] foldl step False [1..] step (foldl step False [2..]) 1 even 1 || (foldl step …


4
このフィボナッチ関数はどのように記憶されていますか?
このフィボナッチ関数はどのようなメカニズムで記憶されていますか? fib = (map fib' [0..] !!) where fib' 1 = 1 fib' 2 = 1 fib' n = fib (n-2) + fib (n-1) そして、関連するノートで、なぜこのバージョンはそうではないのですか? fib n = (map fib' [0..] !! n) where fib' 1 = 1 fib' 2 = 1 fib' n = fib (n-2) + fib (n-1)

5
Clojureでレイジーシーケンスを非レイジーに変換する方法
非遅延シーケンスのクラスが返されることを期待して、Clojureで次のことを試しました。 (.getClass (doall (take 3 (repeatedly rand)))) ただし、これはまだを返しますclojure.lang.LazySeq。私の推測では、doallシーケンス全体が評価されますが、メモ化には引き続き役立つため、元のシーケンスが返されます。 では、遅延シーケンスから非遅延シーケンスを作成する慣用的な方法は何ですか?

1
式のAngular Lazyワンタイムバインディング
AngularJSには、バージョン1.3.0-beta.10以降の新機能、「レイジーワンタイムバインディング」があります。 単純な式の前にを付けて::、式が最初に評価された後に角度を停止するように角度を指定できます。与えられた一般的な例は次のようなものです: &lt;div&gt;{{::user.name}}&lt;/div&gt; 次のような式の同様の構文はありますか? &lt;div ng-if="user.isSomething &amp;&amp; user.isSomethingElse"&gt;&lt;/div&gt; &lt;div ng-class="{classNameFoo: user.isSomething}"&gt;&lt;/div&gt;

7
Haskellの厳格なポイントは何ですか?
Haskellがデフォルトで怠惰であることを私たちは皆知っています(または知っているはずです)。評価する必要があるまで、何も評価されません。それでは、いつ何かを評価する必要がありますか?Haskellが厳密でなければならない点があります。私はこれらを「厳格なポイント」と呼びますが、この特定の用語は思ったほど広くはありません。私によると: Haskellでの削減(または評価)は、厳密な点でのみ発生します。 だから問題は:Haskellの厳格なポイントは、正確には何ですか?私の直感ではmain、seq/ビッグバンパターン、パターンマッチング、およびIOを介しmainて実行されるすべてのアクションが主要な厳密ポイントであると述べていますが、なぜそれを知っているのか本当にわかりません。 (また、これらは「厳密ポイント」と呼ばれていない場合、何をしている彼らが呼ばれます?) 良い答えには、WHNFに関する議論などが含まれると思います。また、ラムダ計算に影響を与えるかもしれないと思います。 編集:この質問に関する追加の考え。 私がこの質問を反映したように、私は厳密さの点の定義に何かを追加するほうがより明確になると思います。厳密なポイントは、さまざまなコンテキストとさまざまな深さ(または厳密さ)を持つことができます。「Haskellでの削減は厳密なポイントでのみ発生する」という私の定義に戻り、その定義にこの句を追加しましょう:「厳密なポイントは、周囲のコンテキストが評価または削減されたときにのみトリガーされます」。 それで、私があなたに私が欲しい種類の答えから始めさせようと思います。main厳格なポイントです。これは、そのコンテキストの主要な厳格なポイントであるプログラムに特別に指定されています。プログラム(mainのコンテキスト)が評価されると、mainの厳密性ポイントがアクティブになります。メインの深さは最大です。完全に評価する必要があります。メインは通常、IOアクションで構成されます。IOアクションは厳密性のポイントでもあり、そのコンテキストはmainです。 seqでは、これらの用語でパターンマッチングについて話し合い、パターンマッチングを試してください。関数適用のニュアンスを説明してください:どのように厳密ですか?いかがですか?どうdeepseqですか?letとcaseステートメント?unsafePerformIO?Debug.Trace?トップレベルの定義?厳密なデータ型?バンパターン?等seqまたはパターンマッチングの観点から説明できるこれらの項目の数は?

5
レイジーI / Oの何が悪いのですか?
量産コードではレイジーI / Oの使用を避けるべきだと一般的に聞いています。私の質問は、なぜですか?いじるだけでなく、Lazy I / Oを使用しても問題ありませんか?そして、何が代替案(例えば列挙子)をより良くするのですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.