問題タブ [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.
f# - F#フォールディングトリプルのシーケンス
私はグーグルで読んで、それを行うための「正しい」方法を見つけようとしていますが、SOで読んだすべての質問は完全に異なる答えを持っているようです。
これが私の問題の要点です。ファイルには、トリプル(a:string、b:string、c:Int64)のseqの型アノテーションがあります。f#に慣れていないので、型アノテーションの表現にまだ精通していません(または、さらに言えば、型シグネチャを理解することもできません)。aはファイル名、bは内部識別子、cはファイルの長さ(サイズ)を表す値です。baseconfigは、コードの前半の文字列です。
このコードのチャンクが行うことになっているのは、の各ファイルを反復処理しfiles
、それをzipアーカイブに追加することです(実際には、後でコミットするためにリストに追加されます)。ファイルが50 MBを超えると、現在のファイルをコミットします。 zipアーカイブへの保留中のファイル。ファイルの追加は安価で、コミットは高価なので、バッチ処理することでコストを軽減しようとしています。
これまでのところ、コードはちょっと機能します...コミットされたファイルの150MBに近づいたときに取得したObjectDisposedExceptionを除いて。しかし、これがそのような操作を行う正しい方法であるかどうかはわかりません。型破りな使い方をしているような気がしSeq.fold
ますが、それでももっといい方法がわかりません。
ボーナスの質問:タプルから値をスナイプするためのより良い方法はありますか?fstとsndは2つの値のタプルに対してのみ機能し、私が行ったようにインライン化する代わりに独自の関数を定義できることを認識していますが、より良い方法があるはずです。
更新:以前のフォールドの試みでは、なぜInt64をアキュムレータとして使用できないのか理解できませんでした。重要な括弧が欠けていたことがわかりました。以下の少し単純なバージョン。また、すべてのクレイジーなタプル抽出を排除します。
更新2:命令型の解決策を採用する必要があります。F#は、後続のステートメントでzipファイルを閉じた後、どういうわけかこのコードブロックを再入力しています。これはObjectDisposedExceptionを説明しています。それがどのように機能するのか、またはその理由はわかりません。
haskell - Haskellでfoldrを使用してマップとフィルターをどのように定義しますか?
私は関数型言語について少し独学しています (現在 Haskell を使用しています)。私は、foldr に関してマップとフィルターを定義する必要がある Haskell ベースの割り当てに出くわしました。私の人生では、これをどのように行うかを完全には理解していません。
たとえば、次のようなマップ関数を定義すると:
リストの最初の要素が常に無視される理由がわかりません。つまり:
[2,4,6,8] ではなく [4,6,8] になります。
同様に、私のフィルター関数:
次のように実行する場合:
[2,4,6] ではなく [4,6] になります。
なぜこれが当てはまるのでしょうか?また、期待される結果を得るには、これらの関数をどのように定義する必要がありますか? ラムダ式に何か問題があると思います...
functional-programming - 条件付きのリストに追加するにはどうすればよいですか?
関数型プログラミングに関する大学のコースがあり、SMLを使用しています。試験の準備として、私は解決策のない古い試験セットのいくつかに取り組んでいます。
私が本当に問題を抱えている唯一の質問の1つは、次の質問を使用していfoldl
ます。
プログラムのスケルトンについて考えてみましょう。funaddGtkxs = List.foldl(...)... xs; addGt k xsがxs内の要素の合計であり、kより大きいように、2つの欠落している部分(ドットで表されます...)を入力します。たとえば、addGt 4 [1、5、2、7、4、8] = 5 + 7 + 8 = 20
これは本当に簡単なことだと思いますが、foldlとfoldrの機能を理解するのは非常に困難です。
私が今持っているのは次のとおりです(私のコンパイラに聞いたら、これは非常に間違っているようです!):
この質問について助けていただければ幸いです。またfoldl
、foldr
機能に光を当てる非常に短いコメントかもしれません。
haskell - folderr で I/O を実行できませんか?
s をs にData.Map
マップする構造があります。なんらかの理由で、次のように、マップの内容をを使用した形式で印刷したいと思います。String
Strings
key: value
foldrWithKey
ただし、(マップに複数の要素がある場合でも) マップの最初の要素のみが出力に表示されます。しかし、リストを作成してfoldrWithKey
印刷しようとすると、すべての要素が表示されます。
では、I/O を実行しようとしたときに他の要素が表示されないのはなぜでしょうか? それはfoldrが機能する方法ですか、それとも私が見逃している微妙なlazy-io関連の癖がありますか?
haskell - foldl/foldr クエリ
私は Haskell の初心者で、foldr/foldl の説明をいくつか読んだ後でさえ、以下の異なる結果が得られる理由がわかりません。説明は何ですか?
ありがとう!
haskell - foldrを使用してfoldlを作成する
Real World Haskell、第4章関数型プログラミングについて:
foldrでfoldlを記述します。
上記のコードは私を大いに混乱させました、そしてdpsと呼ばれる誰かがそれを少し明確にするために意味のある名前でそれを書き直しました:
次に、他の誰かであるJef Gが、例を示し、基礎となるメカニズムを段階的に示すことで、優れた仕事をしました。
しかし、私はまだそれを完全に理解することはできません、ここに私の質問があります:
- id関数は何のためにありますか?の役割は何ですか?なぜここで必要なのですか?
- 上記の例では、id関数はラムダ関数のアキュムレータですか?
- foldrのプロトタイプはです
foldr :: (a -> b -> b) -> b -> [a] -> b
。最初のパラメーターは2つのパラメーターを必要とする関数ですが、myFoldlの実装のstep関数は3つのパラメーターを使用しているため、完全に混乱しています。
list - Haskellのマップ関数を使用してリストの合計を計算する
Haskell
sum
関数を使用してリストの合計を取得することはできましたが、関数を使用してリストの合計を取得することはできmap
ますか?また、マップ機能の用途は何ですか?
list - [1..] のマップから計算結果を除外しますか?
私は現在、友好的なペアを計算するプログラムに取り組んでいます (Project Euler Problem 21 )。私はすでに解決策を見つけましたが、私のプログラムの欠陥は、数値がペアであることが既にわかっているかどうかに関係なく、セット [1..] のすべての数値を評価することであることに気付きました。
つまり、現在評価中の 220 と 284 がそのペアであることが判明した場合、map 関数が 284 に達したときにそれを再度評価するべきではありません。
例として:
戻り値:
私はHaskellと関数型プログラミングにかなり慣れていないので、明らかな解決策であれば許してください。
scala - foldとfoldLeftまたはfoldRightの違いは?
注: 私は Scala 2.8 を使用していますが、問題になる可能性はありますか?
関数をorfold
と同じように使用できないのはなぜですか?foldLeft
foldRight
Set scaladocには、次のように書かれています。
折り畳みの結果は、この並列コレクションの type parameter のスーパータイプのみである可能性があります
T
。
T
しかし、関数シグネチャに型パラメーターがありません。
foldLeft-Right
との違いは何fold
ですか? 後者はどのように使用すればよいですか?
編集:たとえば、リスト内のすべての要素を追加する折り畳みをどのように記述しますか? foldLeft
それは次のようになります。
javascript - jQueryのセレクターによって返される値にfoldlを作成するにはどうすればよいですか?
HTML要素がいくつかあるとします。
私が選択するコンテンツは次のとおりです。
たとえば、改行を使用して要素を結合するために、要素に対して「foldl」操作(反復、結果の累積)を行うにはどうすればよいですか?