問題タブ [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.
haskell - グラフィカル モデル エディターの Zipper データ構造
私は「モデル」 (つまり、UML などの何らかのセマンティクスを持つボックスと線のコレクションであり、その詳細はここでは関係ありません) 用のグラフィカル エディターを作成しています。したがって、モデルを表すデータ構造と、ダイアグラムを編集するとモデルに対応する変更が生じるダイアグラムが必要です。たとえば、モデル要素の属性にテキストが含まれていて、ダイアグラムでテキストを編集する場合、モデル要素を更新する必要があります。
モデルはおそらくツリーとして表されますが、ダイアグラム エディターにはモデルの表現についてできるだけ知らないようにしたいと考えています。(私はダイアグラムフレームワークを使用しているので、任意の情報をグラフィック要素に関連付けるのは簡単です)。それがどうあるべきかを理解できれば、インターフェイスをエンコードする「モデル」クラスがおそらくあるでしょう。
これを命令型言語で行う場合は、簡単です。ダイアグラム内のグラフィカル要素からモデル要素への参照を取得するだけです。理論的には、大量の IORef のコレクションからモデルを構築することでこれを行うことができますが、それは Haskell で Java プログラムを作成することになります。
明らかに、各グラフィック要素には、モデルの更新を可能にする何らかの種類の Cookie が関連付けられています。簡単な答えの 1 つは、各モデル要素に一意の識別子を与え、モデルを Data.Map ルックアップ テーブルに格納することです。ただし、2 つのモデル要素が同じ識別子を取得しないようにするためには、かなりの簿記が必要です。また、「文字列型」のソリューションとしても印象的です。オブジェクトが削除されたが、他の場所でぶら下がっている参照があり、型のモデルの内部構造について何かを言うのが難しい場合を処理する必要があります。
一方、複数の穴を備えたジッパーと明確なトランザクション共有を備えたカーソルに関するOleg の著作は、私が理解できれば、より良い選択肢のように思えます。リスト ジッパーとツリー ジッパーの基本的な考え方と、データ構造の差別化について理解しました。ダイアグラム内のすべての要素がモデルのジッパーにカーソルを保持することは可能でしょうか? 変更が行われた場合、それを他のすべてのカーソルにコミットできるようにするには? ツリー操作 (サブツリーをある場所から別の場所に移動するなど) を含めますか?
区切られた継続に関するある種のチュートリアルと、それらがオレグのマルチカーソルジッパーをどのように機能させるかについての説明があれば、この時点で特に役立ちます。それはオレグの投稿よりも少し急ではありませんか?
class - 現在の要素と左/右リストのさまざまなタイプでZipperのメソッドを一般化する
私はジッパーをいじっています。現在の要素は、左右のリストとは異なるタイプを持つことができます。
moveLeft
とでジッパーをナビゲートできますmoveRight
:
ここでlistF
は、リスト要素と現在の要素を左または右のリスト要素に変換します。currentF
現在の要素とリスト要素を現在の要素に変換します。
現在のタイプとリストタイプの両方が等しい場合、移動は簡単です。
そして、すべてが期待どおりに機能します。
私が今やりたいのは、上記のアイデアを一般化して、与えられた(たとえば、)の関数listF
と関数を実装するだけで、正しいことを自動的に実行することです。これを行う正しい方法は何でしょうか?currentF
Z a b
a :: Char
b :: Int
moveLeft
moveRight
述べる
私はこのようなクラスを実装しようとしました:
とmoveLeft/Right
の観点から実装されてlistF
いcurrentF
ますが、これは失敗します
備考2
上記の考え方について私が一般的に気に入らないのは、任意の機能listF
を許可しているという事実でありcurrentF
、保証することは不可能です
(ジッパーがリスト内にある場合、境界線ではこれはとにかく保持されません)。これを実施するためのヒントはありますか?
clojure - 異種ツリー上の Clojure Zipper
ノードの異種ツリーをトラバースできるジッパーを書くのに問題があります。私は i) マップのリストを持っています。各マップには ii) :inputs キーがあり、その値はマップのリストです。
ジッパーを使用してこれらの葉のそれぞれにアクセスし、計算値を追加したいと考えています。コード ブロックと入力ツリー データは次のとおりです。ジッパー コードを取得してリーフ ノードにアクセスし、{ :thing 123 } を追加できないようです。私は単純なものが欠けているに違いありません。洞察はありますか?
A)
B)
ありがとう
python - ループ内での ord 関数の実行
2 つのフォルダーがあり、各フォルダーには 196 個のファイルが含まれており、すべて ( '\xae\xae\xb4\x9e\x8f\x9f\xba\xc1\xd5\xbd\xcd\xa1\xb7\'
) 形式です。このデータを読み込んで、人間が読める形式に変換しようとしています。2つのフォルダの両方のファイルのデータを結合したい。
関数を使用してこれをord()
試しましたが、期待される出力で単一のファイルを取得しようとすると、間違った値が得られます。読み取りの最初の要素を抽出しようとしましたが、取得している出力はすべてのファイルの値です。ここに私のコードがあります:
期待される出力:
期待していただきありがとうございます。
xml - Clojure: ジッパーを使用して xml から値を取得する
私はこれについて頭を悩ませてきましたが、それはおそらく平凡なものです(またはそうではありません)。ここにあります-xmlからいくつかの値を取得したいと思います。これが私のプログラムです(リファクタリングする必要があります。これは動作中のバージョンです)
REPL (create-map-of-events) で java.lang.RuntimeException: java.lang.NullPointerException が返されます
xml1-> で何が間違っていますか?
clojure - TRIEを抑圧するネストされたマップのClojure Zipper
キーが文字である場合、ネストされたマップで表される TRIE 用の Clojure ジッパーを作成するにはどうすればよいですか?
このようなもの:
「バナナ」と「アナ」の2語でトライを表現。(必要に応じて、ここでマップを変更することができます..)
map? vals assoc
3つの機能をジッパーにそれぞれ渡してみました。しかし、それはうまくいかないようです..
どの 3 つの機能を使用する必要がありますか?
そして、ジッパーに基づいて、インサートイントゥトライはどのように見えるでしょうか?
haskell - Haskell でグリッドのようなデータ型を作成する
問題
これを効率的に行うにはどうすればよいか、しばらく考えていましたが、何らかの理由で実行できませんでした。各フィールドにデータが含まれる長方形のグリッドをモデル化する必要があります。
ジッパーを介してアクセスする必要があります。ここで、フォーカスはフィールド (いわば値) です。ジッパーは、アクションgoDown
、goUp
、goLeft
およびをサポートする必要がありgoRight
ます。各アクションは、指定された方向にフォーカスをフィールドに変更するだけでなく、here
現在フォーカスされているフィールドの値を返す必要があります。
これは で実行できますが、 のルックアップ時間は対数であるため、フォーカスの変更には の要素数である時間Map
がかかるという意味で非効率的です。log n
n
Map
Map
指定されたアクションがO(1)
時間内に機能する必要があります。
例
説明のために、以下のマトリックスを見てください。括弧内の数字は現在のフォーカスです。
私が申請した場合goRight
、私は取得する必要があります:
今申し込んだ場合here
、返される値は になります3
。
質問
上記で説明したフォームのデータ型は、haskell ではどのように見えるでしょうか? 代数データ型として実現可能ですか?
4 つの方向すべてでのフォーカスの変更は、O(1)
現在フォーカスされている値を読み取るだけでなく、時間内に実行できる必要があることに注意してください。