問題タブ [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.
language-agnostic - いつfold-leftを使用するか、いつfold-rightを使用するかをどのように知っていますか?
左に折りたたむと左寄りの木ができ、右に折りたたむと右寄りの木ができることは知っていますが、折り目に手を伸ばすと、頭痛を誘発する思考にとらわれて、どの種類の折り目を判断しようとすることがあります。適切です。私は通常、問題全体を巻き戻し、問題に適用されるfold関数の実装を段階的に実行することになります。
だから私が知りたいのは:
- 左に折りたたむか右に折りたたむかを決定するための経験則は何ですか?
- 私が直面している問題を考慮して、どのタイプの折り目を使用するかをすばやく決定するにはどうすればよいですか?
Scala by Example(PDF)には、foldを使用して、要素リストのリストを1つのリストに連結するflattenという関数を作成する例があります。その場合、(リストを連結する方法を考えると)正しい折り畳みが適切な選択ですが、その結論に到達するために少し考えなければなりませんでした。
フォールディングは(関数型)プログラミングでは非常に一般的なアクションなので、このような決定を迅速かつ自信を持って行えるようにしたいと思います。だから...何かヒントはありますか?
c++ - C ++クラスでアサーションを折りたたむ?
したがって、クラス以外のタイプの状況では、次のようなことができます。
val_to_check
代わりにが宣言されている場合const
、アサーションはコンパイラーによって折りたたむことができます。
クラスのメンバー変数を使用して同様の定数畳み込みを取得できるかどうか知りたいです。たとえば、次のようなことができますか?
したがって、クラスを定義するときにval_を知っている必要があります、a-la:
(私はこれらが不自然な例であることを知っています)。アサーションを折りたたむことは時々可能であるように思われますが、私がテストした単純な例ではそれができないようです。私が得た最善の方法は、アサーションコードを関数の最後に移動することです(-O3を使用してコンパイルする場合)
lisp - 一般的な Lisp の「展開」?
私は SICP からかなりのスキームを学びましたが、今は Common Lisp にもっと興味があります。私は一般的な Lispfold
がでありreduce
、左または右の折り畳みに特別な引数があることを知っていますが、 と同等のものは何unfold
ですか? グーグルはあまり役に立ちませんでした。実際、展開がないという印象を受けます???
vim - コードの折りたたみが vimrc に保存されない
次のコードを .vimrc に追加しました。
HTML および CSS ドキュメントは折り畳みを保存および復元しますが、コードの折り畳みが.vimrcに保存されません
助言がありますか?
編集:
次のコードは問題を解決します。
しかし、私がそれを書くと、MRU ファイルはリストから消えます (そして、最近のファイルのリストを見るために MRU を 2 回開かなければならないのはなぜですか?)
vim - Vim での HTML、Javascript、CSS でのお気に入りの折りたたみ方法 (または秘密のテクニック) は何ですか?
私はこのようなものを使用します:1,40 fo
しかし、最も効率的な方法ではないと思います。
君は?
haskell - フォルダーの観点からのフィルターの定義について、適切な等式推論を使用していますか?
さて、これはfoldrを使用したフィルター関数の定義です。
たとえば、私がこの関数を持っているとしましょう:
したがって、次のようになります。
そしてこれは
そしてこれは
そしてこれは
そしてこれは
そしてそうfoldr step [] []
です[]
:
ここで、実際にstep
関数に入ります。上から見た関数内
の定義は次のとおりです。step
myFilter
p
また、それが実際にはodd
この例の関数であることを思い出してください。
さて、再び、私たちはここにいます:
と
x = 4
最も内側step
にあり、4
奇妙ではないので、を返しys
ます。[]
だから今私たちはこれを手に入れます:
さて、最も内側のstep
、、x = 3
は3
奇数なので、を返しx:ys
ます。これは3 : []
、です[3]
。そして今、次のようになります。
そして今、内側のstep
、、は奇数ではないので、を返しx = 2
ます。これは、であるため、次のようになります。2
ys
[3]
そして今x = 1
、、、1
は奇数なので、を返します。x : ys
これは1 : [3]
、です[1,3]
。
終わり :-)。
私はすべての動きで正しいですか?
どうもありがとう :-)。
psの定義は、第4章myFilter
の本RealWorldHaskellからのものです。
vim - Vim構文ファイルを使用して1行のコメントを1つの領域に折りたたむにはどうすればよいですか?
Javaマニフェストファイルを編集するための構文をまとめています(興味があれば、githubで)。複数の単一行コメントを折りたたむようにしています(現時点ではと一致していますsyntax match manifestComment "#.*"
)。ただし、構文領域を使用しようとすると、ファイル全体がマークされ、全体が折りたたまれます。
私が達成しようとしているのはこれです:
そしてそれを次のように崩壊させます:
問題は、明確な「終了」文字がなく、fold構文が役に立たないことです。だから私はできませんsyntax region commentBlock start="^#" end="^[^#]"
。大まかに言って、構文領域は最初のハッシュ文字から開始し、ハッシュで始まらない行が見つかるまで行を続けていく必要があります。
scala - 関数型プログラミング、Scala マップとフォールドレフト
フォールドレフトに関する良いチュートリアルは何ですか?
他の回答のコンテキストを提供するために削除から復元された元の質問:
長方形、円、場所、およびすべてが Shape を拡張するグループの境界ボックスを見つける方法を実装しようとしています。グループは基本的にシェイプの配列です
グループ 1 を除く 3 つすべてのバウンディング ボックスを計算しました。したがって、バウンディング ボックスの方法については、グループに map と fold left を使用する必要があることはわかっていますが、それを作成するための正確な構文を見つけることができません。
グループ境界ボックスは基本的に、すべての形状が囲まれた最小の境界ボックスです。
haskell - HaskellでフォルダHOFを書く方法
タプルにいくつかの量を追加したいと思います。それを取り出して合計して見せたいです。Foldr機能を使いたい。
誰かが私にやり方を手伝ってくれる?