問題タブ [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.
rust - Rust での遅延シーケンス生成
他の言語が遅延シーケンスまたは「ジェネレーター」関数と呼ぶものを作成するにはどうすればよいですか?
Python ではyield
、次の例 (Python のドキュメントから) のように使用して、中間リストのメモリを使用しない方法で反復可能なシーケンスを遅延生成できます。
Rustで同様のことを行うにはどうすればよいですか?
clojure - clojureでシーケンスから要素を取得する
Clojure のリストとベクトルは、ほとんどの状況でほぼ同じ意味で使用できることを理解しています。これは私を驚かせた簡単なケースです
get
キーのマッピングのドキュメントですが、ベクトルまたはセットで問題なく動作します。エッジケースでのみ違いについて話してnth
いる偶数言及のドキュメント。get
この奇妙な動作に直面した実際の状況は、yaml ファイルをロードしたときでした。その結果、マップとリストの入れ子構造ができました。で要素にアクセスしたかったのget-in
です。
内部でget-in
使用しているため、機能しません。get
だから私は理論的かつ実用的な質問があります:
- この動作は
get
正しいと見なされ、期待されていますか? もしそうなら、理由を説明してください。 - このようなマップとリストの構造でネストされた要素にアクセスするにはどうすればよいですか?
clojure - リストのリストをフラット化して遅延連結する方法
私は怠惰なリストをいじっていますが、これを理解できないようです。これを、必要なすべてを実行する 1 つの大きな再帰関数として記述することで問題を解決できると思いますが、より単純な関数で構成したいと考えています。
私の問題に簡単に変換できる簡単な例を書いてみます。
したがって、2 つの関数があります。1 つは数字の遅延シーケンスを返します。もう 1 つは、number パラメーターを n 回返します (これも怠惰であることを願っています。そうでない場合は、簡単に記述できるように思えます)。
結果の遅延シーケンスを返すような方法で、repeat-n を数値にマップしたいと思います。lazy-seq
、lazy-cat
、 、および再帰関数を少しいじってみましconcat
たが、まだ問題があります。
関数はこのようなものでなければなりません
そして(うまくいけば)呼び出しの結果
だろう
何か案は?
macros - マクロ定義で混乱
SICP セクション 3.5.1 で遅延ストリームを実装したい
まず、この2つの関数を定義しました
私たちが電話したとき:
それでうまくいきました。次に、「stream-cons」の定義を続けますが、今回は 2 つの方法があるようです。
私はそれらが違うとは思わないが、私は間違っている!呼び出されたときの間違った版である初版:
そして、第 2 版は、次のように呼ばれます。
今、私はとても混乱しています。2つの違いを明確にするために、誰が親切に助けてくれますか? どうもありがとう!
私の環境: Windows 32 ビット、SBCL 1.1.4
clojure - Clojure の codata の例に関する用語
Clojure で無限遅延フィボナッチ数列を与える次の関数を想像してください。
仮定
- 私たちは、codata の簡潔な定義を「Codata は、無限の可能性がある値が存在する型である」と考えています。
- この Clojure の例は (core.typed からの) 静的型システムを使用していないため、codata の記述はすべて「作業定義」です。
私の質問は - 上記の関数のどの部分が「codata」ですか。無名関数ですか?それは怠惰なシーケンスですか?
clojure - シーケンスが両端から成長するClojure遅延シーケンス
コメントで定義されているように、無限セットから n 個のアイテムを返す関数を返す関数 (以下にリスト) を作成しました。
関数の動作を明確にするために、テスト (すべて合格) のコードを含めます。
しかし、私が本当に望んでいるのは、「range-right-left」が関数ではなく遅延シーケンスを返すことです。つまり、これを行う代わりに:
私はできるようにしたい:
左から右に厳密に成長するのは、遅延シーケンスのデフォルトの動作のようです。双方向に成長できるレイジー seq を開発しようとしましたが、役に立ちませんでした。そのような提案をいただければ幸いです。
clojure - なぜこのループ関数はマップに比べてとても遅いのですか?
基本的に遅延シーケンスを作成し続けるマップのソースコードを見ました。コレクションを反復処理して一時的なベクトルに追加する方が高速だと思いますが、明らかにそうではありません。Clojures のパフォーマンス動作について理解できないことはありますか?