問題タブ [accumulator]

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 に答える
648 参照

haskell - 反駁できないパターンは再帰的にメモリをリークしませんが、なぜですか?

mapAndSum以下のコードブロックの関数は、以下のすべての機能mapを組み合わせたものですsum(main関数に別の関数が適用されていることを気にしないsumでください。これは、出力をコンパクトにするためだけに役立ちます)。はmap遅延してsum計算されますが、は累積パラメータを使用して計算されます。アイデアはmap、メモリに完全なリストがなくても結果を消費でき、その後(のみ)sum「無料」で利用できるようにすることです。main関数は、を呼び出すときに反駁できないパターンに問題があったことを示していmapAndSumます。この問題について説明させてください。

Haskell標準によると、反駁できないパターンの例let (xs, s) = mapAndSum ... in print xs >> print sは次のように翻訳されます。

したがって、両方のprint呼び出しはペア全体への参照を運び、リスト全体がメモリに保持されます。

私たち(私の同僚のToni Dietzeと私)は、明示的なcaseステートメントを使用してこれを解決しました(「bad」と「good2」を比較してください)。ところで、これを見つけるのにかなりの時間がかかりました..!

さて、私たちが理解していないのは2つあります。

  • mapAndSumそもそもなぜ機能するのですか?また、反駁できないパターンを使用しているため、リスト全体をメモリに保持する必要がありますが、明らかにそうではありません。そして、をに変換するletcase、関数は完全に怠惰な動作になります(スタックがオーバーフローするまで、しゃれは意図されていません)。

    GHCによって生成された「コア」コードを調べましたが、それを解釈できる限り、実際には上記と同じ翻訳が含まletれていました。したがって、ここでは手がかりはなく、代わりにさらに混乱します。

  • なぜ「悪い」のですか?最適化がオフの場合は機能しますが、オンの場合は機能しませんか?

実際のアプリケーションに関する1つの注意点は、大きなテキストファイルのストリーム処理(フォーマット変換)を実現すると同時に、別のファイルに書き込まれる値を蓄積することです。示されているように、私たちは成功しましたが、2つの質問が残っており、回答により、今後のタスクと問題に対するGHCの理解が向上する可能性があります。

ありがとうございました!

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

android - Android:保存されたintを蓄積する方法は?

ユーザーがいくつかを収集するたびに表示されるコインと呼ばれるintがあります。アクティビティが表示されるたびにゼロに設定されますが、累積された結果を別のページに表示したい。これは私が結果を蓄積した方法です:

を表示しましたtotalCoinsが、アプリケーションが強制終了されて再開されるたびに、totalCoins が 0 に戻されます。 メソッドを使用して共有設定で保存しようとしました

コインを0に設定し、アクティビティが再表示されたときにコインを蓄積するにはどうすればよいですputValue("TotalCoins", totalCoins);か?totalCoins = getValue("TotalCoins", 0);

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

haskell - Haskellネストループアキュムレータ

私はサーバー側のプログラミング言語をPHPからHaskellに変更する作業をしているため、関数型言語の設計に完全に精通していません。

ここでは、次のphp関数のような処理コードの一部をHaskellに変換したいと思います。

map / mapM_関数が多用されると思いますが、累積はどのように機能しますか?私は、追加された安全性は、この時点で変革する価値がないと考え始めています。

ありがとう。

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

c++ - 古いサンプルを削除できる C++ アキュムレータ ライブラリ

Boost.Accumulator では、サンプルをアキュムレータに追加し、そこから統計量を抽出できます。例えば:

skewnessライブラリには、 、kurtosis、など、より複雑な統計量が多数ありますp_square_cumulative_distribution

私がやりたいことは次のようなものです:

pop()FIFO (先入れ先出し) 方式で機能します。私がやろうとしているのは、スライディングタイムウィンドウ内でオンライン(増分)方式でデータの統計情報を計算することです。

アキュムレータは、すべての値を内部的に保持する必要があります。

私は自分で行うこともできますが、常に最初に既存のライブラリを確認するのが好きです。データが着信または発信するときに量をスマートに計算することに気付いていないアルゴリズムがあるかもしれません。

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

function - アキュムレータを使用したHaskell再帰

実装しようとしているソルバーのために、リストを指定して3つの同一で隣接する番号を検索する関数を作成しようとしています。次に、3つの同一の隣接する番号がある場合、1番目と3番目の同一の番号を「0」にマークし、中央の値を負に設定します。

なぜこれが私にエラーを与えているのか疑問に思っています。

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

python - ペアのリストに対して Python reduce を使用する

オブジェクトの合計を作成するのと似た方法で、リスト内の一連の要素を組み合わせて最終的なオブジェクトを作成しようとしています。reduceこれを行うために、フラットリストではなくペアのリストを検討する場所について、単純なバリエーションを使用しようとしています。私は次の行に沿って何かをしたい:

ただし、数値のリスト内の各要素に固有の合計に追加情報を追加したいと思いますnums。たとえば、リスト内の各ペア (a,b) について、合計を (a+b) として実行します。

これは動作しません:

うまくいかないのはなぜですか?フラットリストとしてエンコードできることは知っていnumsます-それはポイントではありません-ペアのリスト、または同じ長さの2つのリストを同時に反復し、両方から情報をプールできるreduce操作を作成できるようにしたいだけですリスト。ありがとう。

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

sql - すべての値を累積する方法

表示したい出力は、合計 EMPL_NUM のアキュムレータでした。たとえば、値はフィールド TOTAL_FEBRUARY=TOTAL_JANUARY+TOTAL_FEBRUARY に表示されますが、値はフィールド TOTAL_MARCH=TOTAL_MARCH+TOTAL_JANUARY+TOTAL_FEBRUARY に存在します。あなたの何人かがそれを行うための解決策を提供できることを願っています. どうもありがとうございました。コーディングは次のように表示されます。

ここにインターコード

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

string - アキュムレータを使用してシェルスクリプトと文字列を連結する

'\n' で区切られたリストを、スペースで区切られた別のリストに変換したいと考えています。例: ispell 英語辞書のような辞書を取得します。http://downloads.sourceforge.net/wordlist/ispell-enwl-3.1.20.zip

私の最初のアイデアは、変数をアキュムレータとして使用することでした:

...しかし、結果は '\n' 文字列!!!

質問:

  1. なぜ機能しないのですか?
  2. それを行う正しい方法は何ですか?

    ありがとう。

0 投票する
5 に答える
6816 参照

prolog - Prolog および一般的に末尾再帰を避ける必要がありますか?

私は楽しみのために「Learn Prolog now」オンラインブックに取り組んでいます。

アキュムレータを使用して、リストの各メンバーを通過し、リストに追加する述語を作成しようとしています。末尾再帰なしで簡単に実行できました。

しかし、パフォーマンス上の理由から、このタイプの再帰は避ける方がよいと読みました。これは本当ですか?常に末尾再帰を使用することは「良い習慣」と見なされますか? 良い習慣を身につけるためにアキュムレータを使用する価値はありますか?

この例をアキュムレータを使用するように変更しようとしましたが、リストが逆になります。どうすればこれを回避できますか?