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

vim - ファイルに折り畳みがある場合、gvim は自動的に foldcolumn を表示します

私はあなたが使用できることを知っています

フォールドカラムを有効にする

しかし、ファイルに折り目が存在する場合にのみ自動的にオンにする方法はありますか?

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

recursion - Racketでfoldlが奇妙な方法で定義されているのはなぜですか?

Haskell では、他の多くの関数型言語と同様に、関数foldlは次のように定義されfoldl (-) 0 [1,2,3,4] = -10ます。

foldl (-) 0 [1, 2,3,4]は、定義により、 であるため、これで問題ありません((((0 - 1) - 2) - 3) - 4)

しかし、Racket では2 です。これ(foldl - 0 '(1 2 3 4))は、Racket が「インテリジェントに」次のように計算するためです: (4 - (3 - (2 - (1 - 0))))、実際には 2 です。

もちろん、次のように補助関数 Flip を定義すると:

次に、Racket で Haskell と同じ動作を実現できます。代わりに、次のように(foldl - 0 '(1 2 3 4))記述できます。(foldl (flip -) 0 '(1 2 3 4))

問題はfoldl、なぜラケットでは、他の言語とは異なる、奇妙な (非標準的で直感的でない) 方法で定義されているのでしょうか?

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

f# - F# '+' 演算子のオーバーロードと List.fold

の演算子オーバーロードを定義するレコード型で List.fold を使用しようとしていますが、fold に渡されたラムダとして演算子+を使用しようとすると、型の不一致エラーが発生します。(+)私の問題を例示する単純化されたスニペットは次のとおりです。

オーバーロードは+うまく機能します

しかし、私が人のリストを持っているとしましょう:

List.fold を使用してすべての年齢を合計することはできません。

アキュムレータとして '0' を使用したため+、fold が暗黙的にリストを入力しているため、F# がこの方法で渡されたときのオーバーロードを識別できないことが問題であると推測しています。intカスタム オペレーターのオーバーロードを正しく機能させることができるかどうか、また可能であれば、それを実現するために何が欠けているかはわかりません。+(フロートで使用できるため、これを機能させることができると思います)。

編集

問題は型の不一致であることを理解しています。JaredPar が書いているように、ラムダを記述して 2 人の人物のレコードを取得し、年齢を追加できることがわかりました。それは私の主張ではありません。+問題は、私が既に書いた演算子のオーバーロードを有効なオーバーロードとしてフォールドによって認識されるようにする方法があるべきだと私には思われることです。

別の編集

ご意見をお寄せいただきありがとうございます。明らかになりつつあることの 1 つは、自分のやりたいことができないということですが、それは問題ありません。私は何かを学びました!私が見ているのは、演算子のオーバーロードの解決は、すべてのコンテキストで機能するとは限らないということです。そのため、ラムダとして渡されたものを、インフィックス ala として使用した場合と同じように機能させるシームレスな方法foldはありません。これが正しく機能しない理由は完全に理にかなっています。この問題を解決するために人々が提案した解決策は、基本的に特定の問題を処理するための 1 回限りのものです+jen + kevinfoldfoldbackなど) -- リストを操作するために、特別なケースのコードをたくさん書く必要はありませんでした。F# の演算子のオーバーロードの解決には、表面的なレベルまで動作させるいくつかの制限があることは明らかですが、これは問題ありません。

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

haskell - HaskellにはfoldlM'がありますか?

モナドを厳密に折りたたむにはどうすればよいですか? Data.Foldablestrictfoldl'と monadicfoldlMがありますが、 strict はありませんfoldlM'か? 厳密さはモナド自体によって何らかの形で定義されていますか? もしそうなら、それが何であるかをどのように解決しますか?

リング要素の膨大なリストの積がゼロかどうかを判断する必要があると想像してください。ただし、私のリングは整数ドメインではありません。つまり、デバイザが含まれていません。この場合、リストfoldlの乗算を再帰的に追跡する必要がありますが、完全な積を待つのではなく、積がゼロになる瞬間に戻ります。***False

Maybeモナドを使用してこのコードを少し単純化することもできますfoldlMが、そうすると必要な厳密さが欠けているように見えます。

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

f# - フォールドとリデュースの違いは?

F# を学習しようとしていますが、 foldreduceを区別しようとして混乱しました。Fold も同じことをしているように見えますが、追加のパラメーターが必要です。これら 2 つの機能が存在する正当な理由はありますか? それとも、異なるバックグラウンドを持つ人々に対応するために存在するのでしょうか? (例: C# の文字列と文字列)

サンプルからコピーしたコード スニペットを次に示します。

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

perl - Perl に zip や fold のような機能はありますか?

perlで「zip」「fold」「map」などの機能を使いたいです。(Haskell の場合と同様です。) map を見つけましたが、うまく機能します。では、ジップアンドフォールドはありますか?どうもありがとうございました。

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

scala - 複数の値に対して単純なScalafoldLeftを最適化するための提案はありますか?

JavaからScalaにいくつかのコード(単純なベイズ推定アルゴリズムですが、それはそれほど重要ではありません)を再実装しています。可能な限り可変性を回避することでコードをクリーンで機能的に保ちながら、可能な限りパフォーマンスの高い方法で実装したいと思います。

Javaコードのスニペットは次のとおりです。

とても簡単ですよね?そこで、最初の試行でScalafoldLeftメソッドとmapメソッドを使用することにしました。累積する値が2つあるため、アキュムレータはタプルです。

残念ながら、このコードのパフォーマンスはJavaの約5倍遅くなります(単純で不正確なメトリックを使用します。ループ内でコードを10000回呼び出すだけです)。1つの欠陥はかなり明らかです。リストを2回トラバースしています。1つはmapの呼び出しで、もう1つはfoldLeftでです。これが、リストを1回トラバースするバージョンです。

これの方が良い!Javaコードの約3倍のパフォーマンスを発揮します。私の次の予感は、フォールドの各ステップですべての新しいタプルを作成するのにおそらくいくらかのコストがかかるということでした。そこで、タプルを作成せずに、リストを2回トラバースするバージョンを試すことにしました。

これは、以前のバージョンとほぼ同じように機能します(Javaバージョンの3倍遅い)。それほど驚くことではありませんが、私は希望を持っていました。

だから私の質問は、Scalaコードをクリーンに保ち、不必要な可変性を避け、Scalaイディオムに従う一方で、このJavaスニペットをScalaに実装するより速い方法はありますか?最終的にはこのコードを並行環境で使用することを期待しているため、不変性を維持することの価値は、単一スレッドでのパフォーマンスの低下を上回る可能性があります。

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

haskell - ツリーフォールド操作?

私は Haskell でクラスを受講しています。次のように定義されたツリーの折り畳み操作を定義する必要があります。

「tfold」操作に関する情報や、実際に何をすべきかについての情報が見つからないようです。どんな助けでも大歓迎です。

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

list - Haskell、リスト内の各アイテムに関数を適用する

ちょっとそこに別のhaskellの質問があります私はタイプfの関数を持っています::CSP->代入->変数->整数->CSP

タイプの関数を書きたい

g::CSP->割り当て->変数->[Int]->CSP

これは、元の関数をリスト内のすべての要素に適用します[Int]。渡されたものは、適用さCSPれるたびに更新する必要があります。は、と同じままです。フォールドを使用する必要があると確信していますが、実際には理解できません。誰かが私を助けてくれて、ひだを説明してくれたら本当にありがたいです。fAssigmentVar

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

python - Haskellのfoldi/foldtはPythonに存在しますか?

Haskellのfoldlと同等のpythonsreduceについては知っていますが、Haskellのfoldi/foldtに似たものを見つけることができませんLink_to_haskell_fold_examples