問題タブ [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.
function - スキームジッパー述語関数
リストがジッパーとして定義されている場合に TRUE を返す述語関数を作成しようとしています。ジッパーは、各要素が正確に 2 つの要素を持つリストであり、任意の式である適切なリストとして定義されます。
例として
最初に引数リストがいっぱいかどうかを確認してfalseを返し、次にリストのcarを要素の長さにチェックし、リストのcdrを関数に戻そうとしましたが、実行に問題があります。
私が間違っていることと、それを修正する方法を教えてください。私はまだスキームを学んでいます。
xml - Clojure でコレクションに関数を適用する方法
タグのコレクションの xml から 1 つのタグのコンテンツを抽出する関数を適用しようとしています。基本的に、このようにxmlからコンテンツを抽出する関数を作成しようとしています
そして、これまでの私の解決策は次のようになります
そしてREPLで、このようなタグに func を適用しようとすると
空のコレクション () を取得します。
haskell - Haskellの文法仕様から抽象構文木を構築するには?
私は、BNF で形式化された Java の非常に小さなサブセットで特定の構造を最適化するプロジェクトに取り組んでいます。
これを Java で行う場合は、AST を構築する JTB と JavaCC を組み合わせて使用します。その後、訪問者はツリーを操作するために使用されます。しかし、Haskell で解析するための膨大なライブラリ (parsec、happy、alex など) を考えると、適切なライブラリを選択するのに少し混乱しています。
簡単に言えば、言語が BNF で指定されている場合、AST を構築する最も簡単な手段を提供するライブラリはどれでしょうか? そして、慣用的な Haskell でこのツリーを変更するための最良の方法は何ですか?
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)