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

clojure - Clojureのdata.zip.xmlのようなvector-zip述語ライブラリ?

私は data.zip.xml を使用して大きな成功を収めましたが、ベクターツリーにも同じことが必要であることがわかりました。

vector-zip ジッパー用の data.zip.xml に相当するものの作成に着手する前に、何かが既に存在するかどうかを確認するのは良いことだと思いました。

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

scala - scalaz Tree を繰り返し更新する

パスのリストがあります:

それを Scalaz Tree で表現したい:

結果:

http://eed3si9n.com/learning-scalaz/Tree.htmlTreeLocからいくつか読んだことがありますが、左/右または子インデックスを使用するのはかなり面倒です。次のようなことを想像します:

findand setTreeorを使用できるように見えますmodifyTreeが、それは非常に非効率的です。

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

clojure - Clojure ジッパー パス機能が不完全ですか?

編集#2:この質問と調査全体は、ジッパーの基本的な概念が欠けていることに基づいていました。特定のノードの観点から、データ構造のパースペクティブを表すこと。したがって、zipper は常に、現在のノードと、そのノードから見たツリーの残りの部分のペアです。私は当初、ジッパーからまったく新しい構造を生成しようとしていましたが、必要なのはジッパー自体だけでした。他の誰かがそれによって助けられることを期待して、これはすべて後世に残します(または、後継者への警告として機能します!)。

元の質問:

ジッパーを使って木を操作しようとしています。具体的な問題は、任意のツリー内の任意の基準に一致する 2 つのノード間のルートを実行時に生成する必要があることです。

pathこの関数を使用して、現在の場所を呼び出すことで場所へのルートを取得できると考えpathました。しかし、返されたパスは、そこに到達するために必要な最後のステップを省略しているようです。

例えば:

を与えます5が、

与える

これは同じ場所ではありません (最後の 3 つのステップの効果がありませんdown right right)。

パス関数は、あなたと実際の場所の間の兄弟を無視して、ツリー内の親の場所にのみ到達するようです。

path関数のポイントを見逃していますか?ツリーとパスが与えられた場合、パスをツリーに適用すると、部分的にではなく、パスの元の場所に移動すると想定していました。

UPDATE :次の関数定義を使用して、開始場所から終了場所までのノードのパスをコンパイルしました。

@Mark Fisher とのチャットにかなり影響を受けました。ありがとうございます!

0 投票する
3 に答える
392 参照

clojure - ツリーへの Clojure フラット シーケンス

次のベクトルがあります [-1 1 2 -1 3 0 -1 2 -1 4 0 3 0 0]

木を表すもの[[1 2 [3] [2 [4] 3]]]

ここで、-1 は新しいブランチを開始し、0 はそれを終了します。元のベクターを使用可能なツリーのような clojure 構造 (ネストされたベクター、ネストされたマップ) に変換するにはどうすればよいですか? 私clojure.zip/zipperはそれを行うかもしれないと思いますが、それらの関数引数を構築する方法がわかりません。

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

data-structures - おそらくジッパーを使用して、構造内で要素を移動する方法は?

私はこの構造を持っています:

ベクトル内で移動および要素化するアルゴリズムを作成しようとしています。たとえば、最後の要素には、次のchildrenベクトルがあります。

私の関数は、特定のネストされたマップを検索することになっています-たとえば、10そのbプロパティの値であるマップを見つけます。を見つけます{"a" {"b" 10 "c" 10} "children" []}。見つかったら、その位置をベクターで変更する必要があります。childrenそれが次のようになると仮定しましょう:

Zipper を使用すると、ネストされたマップをトラバースして見つけることができましたが、ベクトル内で移動する方法がわかりませんでした。

これが私のジッパーの作成方法です。

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

algorithm - Zippers を使用して、ネストされた (ネストされたデータ構造に関係なく) データ構造の要素を更新する汎用アルゴリズムを作成することは可能ですか?

先週、ネストされたデータ構造内の特定の要素を更新するために Zippers を使用してアルゴリズムを作成しようとしていました

そこでの私の答えは、その正確な構造の問題を解決し、より多くの要素をネストするとアルゴリズムが壊れます。

ネストされたデータ構造内の特定のデータを更新するために Zippers を使用して一般的なアルゴリズムを作成することは可能ですか? それとも、ジッパーは歩数を正確に把握している場合にのみ使用されますか?

正しくは、Zippers が作成された目的ではない何かを Zippers に実行させようとしていることを理解する必要があります。

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

algorithm - Clojure ジッパーの実装が、Huet のジッパーとは異なる型とデータ構造を使用するのはなぜですか?

Huet の元の論文Clojure の実装を比較し、なぜ変更が加えられたのかを解明しようとしています。私は Clojure の初心者なので、Clojure コードの解釈が間違っている場合は、訂正してください。

Huet の論文では、パスのタイプは (in Ocaml)Top | Node of tree list * path * tree list;;です。Clojure には、2 つの追加フィールドpnodeschanged?. これらのフィールドの目的は何ですか? Huet のタイプの 1 番目と 3 番目のエントリに対応し、それが 2 番目であるlと信じるのは正しいですか?rppath

Huet のジッパーは全体でリンクされたリストを使用します (ジッパーが操作するデータ構造ではなく、Loc 型自体について話していることに注意してください) 一方でl、Clojure の実装ではベクトルを使用する場所もあります。変更の理由と、Clojure 実装の時間の複雑さへの影響は何ですか?

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

android - ロック解除画面の Android ジッパー アニメーション

私は現在、Android モバイル画面のロックを解除するための zip アニメーションに取り組んでいます。背景画像の変更はコストのかかる作業であり、スムーズな効果はありません。滑らかな効果が欲しいです。何か助けてください。ありがとう

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

haskell - 純粋に機能的に二次元グリッドをどのように通過しますか?

たとえば、リスト ジッパーを使用すると、1 次元空間を歩くことができます。二次元グリッドを (パターンなしで) 歩くという概念をエンコードする同様にエレガントで効率的な方法はありますか?