問題タブ [zipper]
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.
java - テキスト エディター用の Clojure ジッパー構造 (マップと配列を使用)
慣れるために、単純なテキスト エディターを clojure で作成しようとしています。構造にジッパーを使用し、エディターをナビゲートして更新することを考えていました。
エディターのテキストを次のようなドキュメントに保存することを考えていました。
だから、これを簡単にナビゲートできるジッパーを作りたい. 多分ジッパーはこれに最適ではないでしょうか?しかし、私は根から始めることを考えていました。下に行くと、その子のノードに移動します。したがって、ドキュメントの先頭は id h1 です。
私は次のものを持っていますが、子を配列にすることはできません:
次のようなものを期待しています:
何かご意見は?誰かが何か提案があれば、構造を完全に変更することにオープンです。
vb.net - Iconic.Zipper ファイル
Ionic.Zip.ZipFile を使用して、これが存在するかどうかのファイル チェックを読み取りますが、書き込まれたコードを返すには zip.Entries.Count です。ここで、zip は Ionic.Zip.ZipFile のオブジェクトです。
誰でも zip.Entries.Count が返すものを提案できますか?
ありがとう
haskell - トラバーサブルとジッパー。必要性と十分性
TraversableをオーバーロードするすべてのタイプTは、 Zipper Tをもたらします。つまり、インスタンス Traversable Tの存在はZipper Tの十分条件です。
これも必要条件であるという証拠はありますか?(それはかなり些細なことだと思いますが、これまでのところ、ジッパーの正式な一般的な定義は見つかりませんでした。)
json - Argonaut を使用して最上位の JSON プロパティを削除するより簡潔な方法はありますか?
この小さなArgonaut Json
インスタンスがあるとしましょう:
ここで、キーが であるペアを削除したいと思いますviewed
。以下が機能することがわかりましたが、少し冗長すぎます。これより短いものはありますか:
また、変更を「コミット」するメソッドの名前 ( undo
) は、私の意見では少し誤解を招くように思えますか? 名前をどのように解釈すればよいですか?最初は、変更履歴の最後の変更を元に戻す方法があると思いました。
アップデート
私は1つの解決策を見つけました。の使用HCursor
:
なぜundo
名前が付けられたのかという問題undo
はまだ未解決です。
c++ - O(1)要素にアクセスできるHaskellのデータ構造のような効率的なジッパーを実装する
質問
要素への高速アクセスと変更を可能にするデータ型を作成したいと考えています。単純な C++ 実装と同じくらい高速に実行される構造体と関数を Haskell で作成することは可能ですか?
問題の詳細
私はHaskellでコンパイラを書いています。データ型で表されるASTを取得しました。次の 1 つを考えてみましょう。
各 AST ノードには一意の識別子があります。Haskell で次の機能を実装したいと思います。
- 選択された ID の時間計算量
getById
の AST ノードを返すfunction 。O(1)
- 構造に「フォーカス」を作成し、フォーカスされた要素を互いに独立して変更できます。したがって、いくつかのサブツリーに焦点を当て、そのような焦点のそれぞれを
O(1)
時間の複雑さで変更できるようにしたいと考えています。
Zippersについて考えていましたが、3 つの問題があります。
- それらは (私が知る限り) 二分木などの単純なデータ型で使用され、「左」または「右」ブランチを選択すると言えます。上記のような複雑なデータ型でそれらを使用する簡単な方法はありますか?
- 時間の複雑さで関数
getById
を実装することはできないと思いますよね?O(1)
- Zippers を使用していくつかの独立したフォーカスを作成することは不可能だと思います。独立したフォーカスとは、フォーカスを意味します。これにより、他のフォーカスを再計算する必要なく、データ型のさまざまな部分を変更できます (
O(1)
)。
C++ の考え方
C++ では、AST ノードへのポインタの配列を作成できますnodePtrs
。にアクセスするだけで、関数nodeById
は で実行されます。C++ 構造は変更可能であるため、.O(1)
*(nodePtrs[id])
O(1)
list - 2 要素リスト スキーム
指定されたリストが要素のペアであるかどうかを判断する関数を作成する必要があります。プログラムは、リストにちょうど 2 つの要素が含まれている場合は単に #t と応答し、含まれていない場合は #f と応答します。
と
私はまだSchemeにかなり慣れていないので、どんな助けでも大歓迎です! ありがとう!
list - スキーム zip 関数
ジッパーとして機能するSchemeで関数を書く必要があります-つまり、2つのリストを取り、2つのリストから「ジッパー」を作成します。
さらに、n 番目の位置にある各要素を取り、それらをペアにします。
私はSchemeにかなり慣れていないので、どんな助けでも大歓迎です! ありがとう!
haskell - レンズとジッパーの違いは何ですか?
これは、Haskell でジッパーを使用する例です。
これは、Clojure でジッパーを使用する例です。
これは、Haskell で Lens を使用する例です。
これは、Clojure で Lens を使用する例です。
現在、レンズとジッパーの両方が、ネストされたデータ構造をトラバースする機能的な方法であるようです。
私の質問は:レンズとジッパーの違いは何ですか? 特定のユースケースに適していますか?
haskell - Data.Tree.Zipper のジッパー データ型に冗長な情報がありますか?
Data.Tree.Zipper では、バラの木のジッパーのデータ型は次のとおりです。
_after と _before の情報は、_parents フィールドにも表示されるはずなので、冗長であるように思えます。(ノードの兄弟は、その親の子です。)
どうしてこれなの?都合上?
haskell - Zipperのムーブアップ方法についての質問
Haskell Wiki でZipperの記事を読んでいますが、次のようにup
定義されているメソッドを理解できません。
パターンup (t, L c r)
ではt
、サブツリーにフォーカスc
がありますか、現在のフォーカスに穴があるc
コンテキストですか? ピントも上がればいいじゃないですか。