問題タブ [lazy-sequences]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unit-testing - 怠惰を単体テストする方法
レイジー seq を受け取り、未実現のレイジー seq を返す関数があります。ここで、結果が未実現の遅延シーケンスであることを確認するために、単体テストを (test-is btw で) 書きたいと思います。
clojure - Clojure: 怠惰な魔法
ランダムの無限の遅延シーケンスを生成するほぼ 2 つの同一のプログラム。最初はクラッシュしません。OutOfMemoryError 例外による 2 番目のクラッシュ。なんで?
しかし、次のクラッシュはかなり早く発生します。
linq - Enumerable.ToDictionaryは、必要なものだけを取得しますか?
Enumerable.ToDictionaryを使用して、linq呼び出しから辞書を作成しています。
その呼び出しは各用語全体をフェッチしますか、それともデータプロバイダーからTermIDフィールドとNameフィールドのみを取得しますか?言い換えれば、代わりに次のように記述した場合、データベーストラフィックを節約できますか?
clojure - Clojureのイテレータブロック?
clojure.contrib.sql
SQLiteデータベースからいくつかのレコードをフェッチするために使用しています。
さて、関数から戻る前にシーケンス全体を実現したくない(つまり、レイジーに保ちたい)が、res
直接戻るか、ある種のレイジーラッパーをラップする場合(たとえば、特定のmap
結果シーケンスの変換)、SQL関連のバインディングがリセットされ、戻った後に接続が閉じられるため、シーケンスを実現すると例外がスローされます。
yield
関数全体をクロージャで囲み、一種のイテレータブロック( C#やPythonなど)を返すにはどうすればよいですか?
または、この関数からレイジーシーケンスを返す別の方法はありますか?
recursion - スタック オーバーフローを引き起こす再帰関数
clojure で素数を計算するための単純なふるい関数を作成しようとしています。効率的なふるい関数の作成に関するこの質問を見たことがありますが、まだその時点ではありません。今、私は非常に単純な (そして遅い) ふるいを書こうとしています。これが私が思いついたものです:
範囲が小さい場合は問題なく動作しますが、範囲が大きい場合はスタック オーバーフローが発生します。
これを使用recur
すると、スタックを消費しないループ構造になると思いましたか? 私は何が欠けていますか?
clojure - プロジェクトオイラー問題14の「先読み」の怠惰なシーケンス
私はプロジェクトオイラー問題14を怠惰な方法で解決しようとしています。残念ながら、私は不可能なことをしようとしているかもしれません。両方とも怠惰な怠惰なシーケンスを作成しますが、まだ計算されていない値をどういうわけか「先読み」します。
正確さをテストするために私が書いた非遅延バージョンは次のとおりです。
これは機能しますが、本当に遅いです。もちろん、私はそれを覚えることができます:
しかし、私が本当にやりたかったのは、怠惰なシーケンスの限界を理解するためにかゆみを掻き、次のような関数を書くことでした。
これから要素をプルすると、n> 2のスタックオーバーフローが発生します。これは、レイジーリストの10番目の要素の値を知るためにn=3で「将来を見据える」必要がある理由を考えると理解できます。 1(* 3 n))=10。
怠惰なリストはメモ化よりもはるかにオーバーヘッドが少ないので、この種のことが、さらに遅延した評価またはキューイングによって何らかの形で可能かどうかを知りたいですか?
clojure - ベクトルである Clojure 遅延シーケンス
私は、Clojure の遅延シーケンスが内部的にリンクされたリストとして表されているように見えることに気付きました (または、少なくとも要素への順次アクセスのみを持つシーケンスとして扱われています)。メモリにキャッシュされた後でも、lazy-seq のアクセス時間nth
は O(n) であり、ベクトルのように一定時間ではありません。
Clojure で一定時間のルックアップを取得したり、遅延ベクトルを段階的に作成したりするにはどうすればよいですか?
遅延ベクトルの生成中に、各要素がその前のすべての要素の関数であるため、リストの走査に費やされる時間が重要な要素になると想像してください。
関連する質問は、この不完全な Java スニペットのみを示しました: Designing a lazy vector: problem with const
linq - .NET 4.0にシーケンス演算子の実装はありますか?
つまり、Linqの結合、グループ化、個別化などと同様に、コレクションではなく、値のシーケンスのみを処理することを意味します。
シーケンスとコレクションの違いは、シーケンスの長さが無限であるのに対し、コレクションは有限である可能性があることです。
例を挙げましょう:
これは動作しません。Exceptの実装は、いずれかのコレクションの数値が厳密に昇順または降順であることに基づいて機能しないため、最初に2番目のコレクションからすべての値をセット(または同様のもの)に収集しようとし、その後でのみ実行されます。最初のコレクションの列挙を開始します。
上記の関数が、明示的に列挙を停止しない限り終了しないWhileループであると仮定すると、上記のコードはメモリ不足の例外で失敗します。
しかし、厳密に昇順または降順であると見なされるコレクションがあることを考えると、.NET4.0にすでに実行できる実装はありますか。
- 両方に共通するすべての値を教えてください(内部結合)
- 両方のすべての値を教えてください(ユニオン/外部結合)
- シーケンス#2にないシーケンス#1のすべての値を教えてください
構築する必要のあるスケジューリングシステムに関連するこのタイプの機能が必要です。ここでは、次のようなことを行う必要があります。
これは基本的に、2010年から2012年まで毎月1日と15日ごとに与えられますが、それらの日付が平日に当たる場合に限ります。
このような関数を使用すると、コレクションを明示的に作成しなくても、問題の値を生成するのがはるかに簡単になります。上記の例では、最初の2つのコレクションを作成するには、3番目のコレクションの制約を知る必要があり、例は上記よりもはるかに複雑になる可能性があります。
clojure - レイジーシーケンスはClojureにどのように実装されていますか?
私はClojureが好きです。言語について私を悩ませていることの1つは、レイジーシーケンスがどのように実装されているか、またはそれらがどのように機能するかがわからないことです。
怠惰なシーケンスは、要求されたシーケンス内のアイテムのみを評価することを知っています。これはどのように行いますか?
- 怠惰なシーケンスが非常に効率的で、スタックをあまり消費しないのはなぜですか?
- 再帰呼び出しを遅延シーケンスでラップし、大規模な計算でスタックオーバーフローを発生させないようにするにはどうすればよいですか?
- レイジーシーケンスは、それが行うことを実行するためにどのようなリソースを消費しますか?
- 怠惰なシーケンスはどのシナリオで非効率的ですか?
- 怠惰なシーケンスが最も効率的なシナリオはどれですか?