問題タブ [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.

0 投票する
4 に答える
20851 参照

rust - Rust での遅延シーケンス生成

他の言語が遅延シーケンスまたは「ジェネレーター」関数と呼ぶものを作成するにはどうすればよいですか?

Python ではyield、次の例 (Python のドキュメントから) のように使用して、中間リストのメモリを使用しない方法で反復可能なシーケンスを遅延生成できます。

Rustで同様のことを行うにはどうすればよいですか?

0 投票する
2 に答える
6357 参照

clojure - clojureでシーケンスから要素を取得する

Clojure のリストとベクトルは、ほとんどの状況でほぼ同じ意味で使用できることを理解しています。これは私を驚かせた簡単なケースです

getキーのマッピングのドキュメントですが、ベクトルまたはセットで問題なく動作します。エッジケースでのみ違いについて話してnthいる偶数言及のドキュメント。get

この奇妙な動作に直面した実際の状況は、yaml ファイルをロードしたときでした。その結果、マップとリストの入れ子構造ができました。で要素にアクセスしたかったのget-inです。

内部でget-in使用しているため、機能しません。getだから私は理論的かつ実用的な質問があります:

  • この動作はget正しいと見なされ、期待されていますか? もしそうなら、理由を説明してください。
  • このようなマップとリストの構造でネストされた要素にアクセスするにはどうすればよいですか?
0 投票する
1 に答える
390 参照

clojure - リストのリストをフラット化して遅延連結する方法

私は怠惰なリストをいじっていますが、これを理解できないようです。これを、必要なすべてを実行する 1 つの大きな再帰関数として記述することで問題を解決できると思いますが、より単純な関数で構成したいと考えています。

私の問題に簡単に変換できる簡単な例を書いてみます。

したがって、2 つの関数があります。1 つは数字の遅延シーケンスを返します。もう 1 つは、number パラメーターを n 回返します (これも怠惰であることを願っています。そうでない場合は、簡単に記述できるように思えます)。

結果の遅延シーケンスを返すような方法で、repeat-n を数値にマップしたいと思います。lazy-seqlazy-cat、 、および再帰関数を少しいじってみましconcatたが、まだ問題があります。

関数はこのようなものでなければなりません

そして(うまくいけば)呼び出しの結果

だろう

何か案は?

0 投票する
1 に答える
128 参照

macros - マクロ定義で混乱

SICP セクション 3.5.1 で遅延ストリームを実装したい

まず、この2つの関数を定義しました

私たちが電話したとき:

それでうまくいきました。次に、「stream-cons」の定義を続けますが、今回は 2 つの方法があるようです。

私はそれらが違うとは思わないが、私は間違っている!呼び出されたときの間違った版である初版:

そして、第 2 版は、次のように呼ばれます。

今、私はとても混乱しています。2つの違いを明確にするために、誰が親切に助けてくれますか? どうもありがとう!

私の環境: Windows 32 ビット、SBCL 1.1.4

0 投票する
2 に答える
843 参照

clojure - Clojure の codata の例に関する用語

Clojure で無限遅延フィボナッチ数列を与える次の関数を想像してください。

仮定

  1. 私たちは、codata の簡潔な定義を「Codata は、無限の可能性がある値が存在する型である」と考えています。
  2. この Clojure の例は (core.typed からの) 静的型システムを使用していないため、codata の記述はすべて「作業定義」です。

私の質問は - 上記の関数のどの部分が「codata」ですか。無名関数ですか?それは怠惰なシーケンスですか?

0 投票する
3 に答える
153 参照

clojure - シーケンスが両端から成長するClojure遅延シーケンス

コメントで定義されているように、無限セットから n 個のアイテムを返す関数を返す関数 (以下にリスト) を作成しました。

関数の動作を明確にするために、テスト (すべて合格) のコードを含めます。

しかし、私が本当に望んでいるのは、「range-right-left」が関数ではなく遅延シーケンスを返すことです。つまり、これを行う代わりに:

私はできるようにしたい:

左から右に厳密に成長するのは、遅延シーケンスのデフォルトの動作のようです。双方向に成長できるレイジー seq を開発しようとしましたが、役に立ちませんでした。そのような提案をいただければ幸いです。

0 投票する
1 に答える
176 参照

clojure - なぜこのループ関数はマップに比べてとても遅いのですか?

基本的に遅延シーケンスを作成し続けるマップのソースコードを見ました。コレクションを反復処理して一時的なベクトルに追加する方が高速だと思いますが、明らかにそうではありません。Clojures のパフォーマンス動作について理解できないことはありますか?