問題タブ [fold]

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 投票する
1 に答える
699 参照

scala - foldLeft と for-yield の組み合わせはありますか?

一連の注文を処理する必要があります (ここIntでは簡略化のために):

いわゆる

function 別のクラスのシーケンスを取得します (ここDoubleでは簡略化のために)。

これから、2つのバージョンを実装しました。

バージョン 1 (foldLeft および明示的なビルダー):

バージョン 2 (var および yield builder 用):

varバージョン 1 で明示的なビルダーを保存するか、バージョン 2 でミュータブルを保存したいと思います。

これは可能ですか?foldLeftおそらく、とfor-の組み合わせでyield

そしてまだ何かサンプルデータ:

nextGroupとして扱われる結果は、Seq[Double]そうでVectorあろListうとなかろうと違いはありません。

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

haskell - foldlは、その厳密ないとこであるfoldl'よりも好ましいですか?

Haskellにはリスト用の2つの左折り関数があります:foldlと「厳密な」バージョン、foldl'。非厳密の問題はfoldl、サンクの塔を構築することです。

これはメモリを浪費し、リストに項目が多すぎるとスタックオーバーフローを引き起こす可能性があります。 foldl'一方、すべてのアイテムにアキュムレータを強制します。

ただし、私が知る限り、意味的foldl'にはと同等です。通常の形式で評価するには、ある時点でアキュムレータを強制する必要があります。ヘッドノーマルフォームが必要なければ、そもそも評価していません。foldlfoldl (+) 0 [1..5]foldl (+) 0 [1..5]

foldlそれ以上の振る舞いをしたいという説得力のある理由はありfoldl'ますか?

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

haskell - フォールディング、関数合成、モナド、そして怠惰、なんてこった?

私は困惑しています。私はこれを書くことができます:

出力は1です。それは次のように還元されるため、理にかなっています。

しかし、漠然と似たモナド手法を使用すると、同じようには機能しません。

これは当たりprelude.Undefinedます。私はそれが減少すると予想するので、これは奇妙です:

ただし、構成の順序を反転します。

予想される短絡を達成し、生成しNothingます。

2 つのアプローチを比較すると、リンゴとオレンジを比較することになると思いますが、その違いを説明していただけますか? f <=< gこれは のモナド類似体だと思っていましたが、思ったf . gほど類似していないようです。理由を説明できますか?

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

haskell - Functor ではない (または Traversable ではない) Foldable の例は?

インスタンスはある種のFoldableコンテナである可能性が高く、Functor同様に である可能性もあります。確かに、これは言う

Foldableはコンテナでもあります (クラスは技術的には を必要としませんがFunctor、興味深いFoldableのはすべてFunctorです)。

Foldableでは、自然に aFunctorまたは aではないa の例はありTraversableますか? (おそらく Haskell の wiki ページは見逃していました :-) )

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

scala - Scala:foldLeftの型パラメーターへのキャストを回避する

シミュレーションの状態の特性を定義するこのスニペットについて考えてみます。これは、ユーザーが派生型で実装することが期待されています。特性上、ユーティリティメソッドのコレクションは、Scalaライブラリコレクションがこれを行うのと同様に、実装のタイプを持つ結果を提供できる必要があります。これを実現するには、次のように、実装タイプを使用してトレイトをパラメーター化する必要があると思います。

ここで、次のようなマルチステップの更新メソッドを定義したいと思います。

私が素朴なアプローチを試みるとき:

コンパイラは型の不一致について文句を言います:

thisこれは、State内で見られるように、State[This]タイプを持っているので意味があります。コードをコンパイルするには、明示的なキャストを行う必要があるようです。

この明示的なキャストを回避する方法、またはより一般的にはより良い方法で意図した結果を達成する方法はありますか?ありがとう。

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

erlang - foldlを壊す簡単な方法

foldlから抜け出す必要があります。これは、リスト内の値の合計を数え、大きすぎる値(つまり、10)に遭遇したときにフォールドから抜け出す方法のダミーの例です。

この例は人工的なものですが、フォールドを分割するための優れた方法はありますか(フォールドは常に構造全体をスキャンすることを知っています)?

フォールドから抜けても正しいデータを取得する必要があることに注意してください。この場合、前の反復からデータを取得する必要があります(私の例で行ったように)。

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

haskell - リスト内包表記で作成された中間データ構造はありますか

foldrリスト内包表記とのある種の融合を行うように思われるためfoldl、この例では (21mb)と比較してメモリ (11mb) の割り当てが少なくて済みます。

誰かがその方法と理由を説明できますか? また、遅延評価がこれにどのように役立つか。

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

scala - 継続を使用して foldRight テールを再帰的にすることは可能ですか?

次のブログ記事は、F# でfoldBack継続渡しスタイルを使用して末尾再帰を行う方法を示しています。

Scala では、これは次のことを意味します。

これを行うことで末尾再帰にすることができます:

残念ながら、長いリストではまだスタック オーバーフローが発生します。loop は末尾再帰的で最適化されていますが、スタックの蓄積は継続呼び出しに移動しただけだと思います。

これが F# の問題ではないのはなぜですか? Scalaでこれを回避する方法はありますか?

編集:スタックの深さを示すいくつかのコード:

これは以下を出力します:

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

haskell - 厳密な評価のための機能表現はありますか?

Haskell内から厳密な折りたたみ関数を自分で実装したい:これは可能ですか?Lispマクロを使用して言語を大幅に再定義できることを読みました。これにより、必要なときにいつでも機能パラダイムから効果的に抜け出し、パーソナライズされたパラダイムに成形して、最も適切に作業を行うことができます。可能な方法。私は実際にlispを知らないので、それは間違っているかもしれません。

型なしラムダ計算ではデータ型が関数としてエンコードされていることも考慮に入れると、何でも他のものとしてエンコードできるのではないかと思い始めます(すばらしい本GEBでこれについて詳しく説明されています)。その場合、厳密な評価を表現するのは簡単なように思えます。

では、haskell内から次のことをどのように実装しますか?

モナドや継続渡しと関係があるのではないかと思います。

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

vim - vimですべての段落を折りたたむ方法

「zfap」コマンドを知っていて、段落を折りたたむことができます。

しかし、どうすればすべての段落を折りたたむことができますか? この仕事をすることができる魔法のコマンドはありますか?

「global」コマンドを検索したのですが、「global」は行モードでしか機能しないようです。すべての段落を 1 つずつ処理するにはどうすればよいですか?