問題タブ [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.

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

java - テキスト エディター用の Clojure ジッパー構造 (マップと配列を使用)

慣れるために、単純なテキスト エディターを clojure で作成しようとしています。構造にジッパーを使用し、エディターをナビゲートして更新することを考えていました。

エディターのテキストを次のようなドキュメントに保存することを考えていました。

だから、これを簡単にナビゲートできるジッパーを作りたい. 多分ジッパーはこれに最適ではないでしょうか?しかし、私は根から始めることを考えていました。下に行くと、その子のノードに移動します。したがって、ドキュメントの先頭は id h1 です。

私は次のものを持っていますが、子を配列にすることはできません:

次のようなものを期待しています:

何かご意見は?誰かが何か提案があれば、構造を完全に変更することにオープンです。

0 投票する
0 に答える
65 参照

vb.net - Iconic.Zipper ファイル

Ionic.Zip.ZipFile を使用して、これが存在するかどうかのファイル チェックを読み取りますが、書き込まれたコードを返すには zip.Entries.Count です。ここで、zip は Ionic.Zip.ZipFile のオブジェクトです。

誰でも zip.Entries.Count が返すものを提案できますか?

ありがとう

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

haskell - トラバーサブルとジッパー。必要性と十分性

TraversableをオーバーロードするすべてのタイプTは、 Zipper Tをもたらします。つまり、インスタンス Traversable Tの存在はZipper Tの十分条件です。

これも必要条件であるという証拠はありますか?(それはかなり些細なことだと思いますが、これまでのところ、ジッパーの正式な一般的な定義は見つかりませんでした。)

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

json - Argonaut を使用して最上位の JSON プロパティを削除するより簡潔な方法はありますか?

この小さなArgonaut Jsonインスタンスがあるとしましょう:

ここで、キーが であるペアを削除したいと思いますviewed。以下が機能することがわかりましたが、少し冗長すぎます。これより短いものはありますか:

また、変更を「コミット」するメソッドの名前 ( undo) は、私の意見では少し誤解を招くように思えますか? 名前をどのように解釈すればよいですか?最初は、変更履歴の最後の変更を元に戻す方法があると思いました。

アップデート

私は1つの解決策を見つけました。の使用HCursor:

なぜundo名前が付けられたのかという問題undoはまだ未解決です。

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

c++ - O(1)要素にアクセスできるHaskellのデータ構造のような効率的なジッパーを実装する

質問

要素への高速アクセスと変更を可能にするデータ型を作成したいと考えています。単純な C++ 実装と同じくらい高速に実行される構造体と関数を Haskell で作成することは可能ですか?

問題の詳細

私はHaskellでコンパイラを書いています。データ型で表されるASTを取得しました。次の 1 つを考えてみましょう。

各 AST ノードには一意の識別子があります。Haskell で次の機能を実装したいと思います。

  • 選択された ID の時間計算量getByIdの AST ノードを返すfunction 。O(1)
  • 構造に「フォーカス」を作成し、フォーカスされた要素を互いに独立して変更できます。したがって、いくつかのサブツリーに焦点を当て、そのような焦点のそれぞれをO(1)時間の複雑さで変更できるようにしたいと考えています。

Zippersについて考えていましたが、3 つの問題があります。

  1. それらは (私が知る限り) 二分木などの単純なデータ型で使用され、「左」または「右」ブランチを選択すると言えます。上記のような複雑なデータ型でそれらを使用する簡単な方法はありますか?
  2. 時間の複雑さで関数getByIdを実装することはできないと思いますよね?O(1)
  3. Zippers を使用していくつかの独立したフォーカスを作成することは不可能だと思います。独立したフォーカスとは、フォーカスを意味します。これにより、他のフォーカスを再計算する必要なく、データ型のさまざまな部分を変更できます ( O(1))。

C++ の考え方

C++ では、AST ノードへのポインタの配列を作成できますnodePtrs。にアクセスするだけで、関数nodeByIdは で実行されます。C++ 構造は変更可能であるため、.O(1)*(nodePtrs[id])O(1)

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

list - 2 要素リスト スキーム

指定されたリストが要素のペアであるかどうかを判断する関数を作成する必要があります。プログラムは、リストにちょうど 2 つの要素が含まれている場合は単に #t と応答し、含まれていない場合は #f と応答します。

私はまだSchemeにかなり慣れていないので、どんな助けでも大歓迎です! ありがとう!

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

list - スキーム zip 関数

ジッパーとして機能するSchemeで関数を書く必要があります-つまり、2つのリストを取り、2つのリストから「ジッパー」を作成します。

さらに、n 番目の位置にある各要素を取り、それらをペアにします。

私はSchemeにかなり慣れていないので、どんな助けでも大歓迎です! ありがとう!

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

haskell - レンズとジッパーの違いは何ですか?

これは、Haskell でジッパーを使用する例です。

これは、Clojure でジッパーを使用する例です。

これは、Haskell で Lens を使用する例です。

これは、Clojure で Lens を使用する例です。

現在、レンズとジッパーの両方が、ネストされたデータ構造をトラバースする機能的な方法であるようです。

私の質問は:レンズとジッパーの違いは何ですか? 特定のユースケースに適していますか?

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

haskell - Data.Tree.Zipper のジッパー データ型に冗長な情報がありますか?

Data.Tree.Zipper では、バラの木のジッパーのデータ型は次のとおりです。

_after と _before の情報は、_parents フィールドにも表示されるはずなので、冗長であるように思えます。(ノードの兄弟は、その親の子です。)

どうしてこれなの?都合上?

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

haskell - Zipperのムーブアップ方法についての質問

Haskell Wiki でZipperの記事を読んでいますが、次のようにup定義されているメソッドを理解できません。

パターンup (t, L c r)ではt、サブツリーにフォーカスcがありますか、現在のフォーカスに穴があるcコンテキストですか? ピントも上がればいいじゃないですか。