問題タブ [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.
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
うとなかろうと違いはありません。
haskell - foldlは、その厳密ないとこであるfoldl'よりも好ましいですか?
Haskellにはリスト用の2つの左折り関数があります:foldl
と「厳密な」バージョン、foldl'
。非厳密の問題はfoldl
、サンクの塔を構築することです。
これはメモリを浪費し、リストに項目が多すぎるとスタックオーバーフローを引き起こす可能性があります。 foldl'
一方、すべてのアイテムにアキュムレータを強制します。
ただし、私が知る限り、意味的foldl'
にはと同等です。通常の形式で評価するには、ある時点でアキュムレータを強制する必要があります。ヘッドノーマルフォームが必要なければ、そもそも評価していません。foldl
foldl (+) 0 [1..5]
foldl (+) 0 [1..5]
foldl
それ以上の振る舞いをしたいという説得力のある理由はありfoldl'
ますか?
haskell - フォールディング、関数合成、モナド、そして怠惰、なんてこった?
私は困惑しています。私はこれを書くことができます:
出力は1
です。それは次のように還元されるため、理にかなっています。
しかし、漠然と似たモナド手法を使用すると、同じようには機能しません。
これは当たりprelude.Undefined
ます。私はそれが減少すると予想するので、これは奇妙です:
ただし、構成の順序を反転します。
予想される短絡を達成し、生成しNothing
ます。
2 つのアプローチを比較すると、リンゴとオレンジを比較することになると思いますが、その違いを説明していただけますか? f <=< g
これは のモナド類似体だと思っていましたが、思ったf . g
ほど類似していないようです。理由を説明できますか?
scala - Scala:foldLeftの型パラメーターへのキャストを回避する
シミュレーションの状態の特性を定義するこのスニペットについて考えてみます。これは、ユーザーが派生型で実装することが期待されています。特性上、ユーティリティメソッドのコレクションは、Scalaライブラリコレクションがこれを行うのと同様に、実装のタイプを持つ結果を提供できる必要があります。これを実現するには、次のように、実装タイプを使用してトレイトをパラメーター化する必要があると思います。
ここで、次のようなマルチステップの更新メソッドを定義したいと思います。
私が素朴なアプローチを試みるとき:
コンパイラは型の不一致について文句を言います:
this
これは、State内で見られるように、State[This]タイプを持っているので意味があります。コードをコンパイルするには、明示的なキャストを行う必要があるようです。
この明示的なキャストを回避する方法、またはより一般的にはより良い方法で意図した結果を達成する方法はありますか?ありがとう。
erlang - foldlを壊す簡単な方法
foldlから抜け出す必要があります。これは、リスト内の値の合計を数え、大きすぎる値(つまり、10)に遭遇したときにフォールドから抜け出す方法のダミーの例です。
この例は人工的なものですが、フォールドを分割するための優れた方法はありますか(フォールドは常に構造全体をスキャンすることを知っています)?
フォールドから抜けても正しいデータを取得する必要があることに注意してください。この場合、前の反復からデータを取得する必要があります(私の例で行ったように)。
haskell - リスト内包表記で作成された中間データ構造はありますか
foldr
リスト内包表記とのある種の融合を行うように思われるためfoldl
、この例では (21mb)と比較してメモリ (11mb) の割り当てが少なくて済みます。
誰かがその方法と理由を説明できますか? また、遅延評価がこれにどのように役立つか。
scala - 継続を使用して foldRight テールを再帰的にすることは可能ですか?
次のブログ記事は、F# でfoldBack
継続渡しスタイルを使用して末尾再帰を行う方法を示しています。
Scala では、これは次のことを意味します。
これを行うことで末尾再帰にすることができます:
残念ながら、長いリストではまだスタック オーバーフローが発生します。loop は末尾再帰的で最適化されていますが、スタックの蓄積は継続呼び出しに移動しただけだと思います。
これが F# の問題ではないのはなぜですか? Scalaでこれを回避する方法はありますか?
編集:スタックの深さを示すいくつかのコード:
これは以下を出力します:
haskell - 厳密な評価のための機能表現はありますか?
Haskell内から厳密な折りたたみ関数を自分で実装したい:これは可能ですか?Lispマクロを使用して言語を大幅に再定義できることを読みました。これにより、必要なときにいつでも機能パラダイムから効果的に抜け出し、パーソナライズされたパラダイムに成形して、最も適切に作業を行うことができます。可能な方法。私は実際にlispを知らないので、それは間違っているかもしれません。
型なしラムダ計算ではデータ型が関数としてエンコードされていることも考慮に入れると、何でも他のものとしてエンコードできるのではないかと思い始めます(すばらしい本GEBでこれについて詳しく説明されています)。その場合、厳密な評価を表現するのは簡単なように思えます。
では、haskell内から次のことをどのように実装しますか?
モナドや継続渡しと関係があるのではないかと思います。
vim - vimですべての段落を折りたたむ方法
「zfap」コマンドを知っていて、段落を折りたたむことができます。
しかし、どうすればすべての段落を折りたたむことができますか? この仕事をすることができる魔法のコマンドはありますか?
「global」コマンドを検索したのですが、「global」は行モードでしか機能しないようです。すべての段落を 1 つずつ処理するにはどうすればよいですか?