問題タブ [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 投票する
2 に答える
466 参照

haskell - mapMの怠惰なバージョン

IOを使用しているときに、大量のアイテムのリストを取得するとします。

今、私はに適用しようとしていfn :: a -> IO bますas

mapMタイプmapM :: Monad m => (a -> m b) -> [a] -> m [b]があり、それがタイプマッチングの観点から必要なものです。ただし、結果が返されるまで、すべてのチェーンがメモリに構築されます。尾がまだ構築されている間mapMに頭を使用できるように、怠惰に動作するのアナログを探しています。bs

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

haskell - Haskellで単一のIO操作としてn個のファイルを遅延して読み取ることはできますか?

複数のファイルを単一の ByteString として一定のメモリで遅延して読み取るにはどうすればよいですか?

現在、次の実装がありますが、プロファイリングから見たものと私の理解からn-1、メモリ内のファイルで終了します。

foldl1 joinIOStringsここでの欠陥は、IO アクションを適用してからそれらを再ラップしていることであることを理解しています。そのため、それらを適用せずに を置き換える方法が必要だと思います。

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

clojure - 生成されたシーケンスを繰り返し停止して分割します-clojure

次の条件が見つかり、リストされた結果が返されるまで値を生成するだけのシーケンスを作成しようとしています。

ケースヘッド=

  • 0-戻り値{:origin [0を除くすべてが生成されます]:pattern 0}
  • 1-{:origin nil:pattern[all-generated-values]}を返します
  • 繰り返し値-{:origin [values-before-repeat]:pattern [values-after-repeat]

{{

行の終わりに達する前に停止するケースの例:

[9 8 4 5 6 7 4 ]-「4」が繰り返されるので、停止します。前を原点として返し、残りをパターンとして返します。

[4 5 6 1]-「1」が見つかったのでSTOPなので、すべてをパターンとして返します

[ 30 ]-「0」が見つかったので停止します

:それ以外の場合、シーケンスがx-1の長さに達した場合:

問題

繰り返し値が見つかった時点でグループを分割するためにpartition-byを使用して成功しましたが、これを怠惰に実行したいと思います。take-while、condp、またはforループの:while句を使用して、繰り返しが見つかったときにパーティション化する条件を作成する方法はありますか?

いくつかの試み

#アップデート

私が本当にやりたいのは、値が繰り返されているかどうかを調べ、インデックスを使用せずにseqを分割することです。それは可能ですか?このようなもの -

{{

}

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

clojure - Clojure での遅延フィボナッチ実装の実行を理解する

次のコードの実行を理解しようとしています。

これは、実行が次のようになると私が期待するものです

結果が間違っているので、これは明らかに間違っています。私が思いついた唯一の実行で正しい結果が得られたのは次のとおりです。

これは、実行中の頭と尾の状態の正しい「表現」ですか? もしそうなら、なぜ(rest fibs)単一のアイテムを返すのですか? (rest (rest (rest [1 1 2 3]))) のような再帰呼び出しのためですか?

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

clojure - 遅延シーケンスの実現タイミング

出力はなぜ

いいえ

?

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

scala - TraversableビューでfoldLeftを実行するときのScalaでのタイプ分散エラー

Traversable演算子を使用してScalaで一連のビューを連結しようとfoldLeftしていますが、理解できない型の差異エラーが発生しています。

このようにビューreduceのリストを連結するために使用できます。Traversable

reduce(引数に型注釈を記述しなければならないことに注意してください:reduce(_ ++ _)コンパイルされません。理由がわかりません。これについても説明していただければ幸いです。)

リストを頭と尾に分割して連結することもできます。

しかし、同じことをIで行おうとすると、foldLeft型の差異エラーが発生します。

問題はの実存型に関係していると思いますがTraversable[_]、私が間違っていることを正確に理解することはできません。上記の式でさまざまな型アノテーションを試しましたが、役に立ちませんでした。Stackoverflowに関する他の質問から判断すると、の入力には注意が必要ですがfoldLeft、この問題に対処するものは見つかりませんでした。

比較のために、同じアルゴリズムを使用しStreamても問題なく機能します。

上記は私がやりたいことですが、Streamすべての結果をメモ化する必要がないため、代わりにビューを使用したい場合があります。

これは奇妙な要求のように見えるかもしれません。私がこの方法で物事をやりたい理由foldLeftは、ビューを実行することで、遅延深さ優先探索Traversableを実装する効率的な方法が提供されるためです。

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

haskell - 不要なメモ化を防ぐためのダブルストリームフィード?

私はHaskellを初めて使用し、ストリーム処理スタイルでオイラーのふるいを実装しようとしています。

素数についてHaskellWikiページをチェックしたところ、ストリームの不思議な最適化手法が見つかりました。3.8そのウィキの線形マージ:

そしてそれは言う

「<strong>メリッサオニールのコードに従って、不要なメモ化を防ぎ、メモリリークを防ぐために、ここにダブルプライムフィードが導入されています。」</ p>

これはどうやってできるの?それがどのように機能するのか理解できません。

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

haskell - ストリーム処理スタイルのオイラーの効率的なふるい

Sieve of eulerは、 Sieve of Eratosthenesよりも漸近的な複雑さを備えており、命令型言語で簡単に実装できます。

ストリームを使ってエレガントに実装する方法があるかどうか疑問に思っています。素数についてhaskellwikiを確認しましたが、2つの実装はそのwikiの他のふるい(試行除算でさえ!)よりも数百倍遅いです。

だから私は自分で書こうとします:

minusに似てminusData.List.Ordます。

takeWhile'に似てtakeWhileいますが、わずかな違いがありtakeWhileます。述語を満たさない最初の要素を削除します。takeWhile'それを取るでしょう。

lsp iiの積の有限ストリームを返し、iの最小素因数以下を素数にします。

悲しいことに、私の実装は信じられないほど遅くなります...そして私は犯人を見つけることができません。

とにかく、ストリーム処理スタイルでオイラーの効率的なふるいを実装することは可能ですか?または、アルゴリズムには、ストリームの性質に対して固有の影響がありますか?

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

clojure - LazySeq をマップの 1 つのコレクションに結合する

いくつかの LazySeq を 1 つのマップのコレクションに結合しようとしています。

の中へ

LazySeq は同じ長さであることが保証されています。これを行う機能的な方法は何ですか?

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

stream - スキーム内のストリーム - スキーム内のストリーム マップを介して整数を定義します

スキームでストリームマップを介して整数を定義するにはどうすればよいですか: