問題タブ [catamorphism]
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 - 部分モナド関数を使用した ADT でのフォールド/カタモルフィズムの作成
私がしようとしているものの実際の名前が何であるかは少しわかりません。折り畳みまたはカタモルフィズムを作成することがその名前のようです。
折り畳みのある次のデータ構造があります。
この折り畳みは、たとえば次の「実装」でうまく機能します。
このコマンドの使用
1 2 3 4
期待どおりに印刷されます。
ここまではいいんだけど..
次のようにデータ構造を歩いているときに、いくつかの情報 (この場合はファイルパス) を「プッシュ」したい場合:
私はそれをコンパイルすることができません。次のエラーが返されます。
このように部分モナド関数を返すことはできないようですが、なぜですか? どうすればこれを機能させることができますか?
haskell - Cofree アノテーションを使用して AST を操作するには?
私はこの単純なExpr
AST を持っており、簡単に に変換できますString
。
ここで、追加のデータを追加したいと思います。だから私は使用しようとしていますCofree
に変換できExpr
ますExpr2
Expr2
しかし、私はに変換する方法を理解できませんString
また、Cofree はこの注釈の問題を解決する最良の方法ですか?
haskell - 2 つのツリーを再帰スキームと比較することは可能ですか?
私はこのASTを持っています
そして比較したい
しかし、すべての再帰スキーム関数は単一の構造でのみ機能するようです
明らかに再帰を使用できます
しかし、ある種のzipfold機能を使用できることを願っています。
haskell - CoFree を F 代数カタモルフィズムに混ぜるには?
まず、これはhttps://www.schoolofhaskell.com/user/bartosz/understanding-algebrasに基づいて いるため、代数と再帰スキームに慣れていない場合は、コンテキストを読んでください。
単純な式パーサーがあるとします。
成功する場合としない場合があります。例:
私の質問は、
1) 関数を更新してparse
、解析位置でノードに注釈を付けます
2) エラーメッセージの前に解析位置を付ける
以下のこれらの新しい機能を上記の機能とどのように統合できますか?
使用例:
これはザイゴモーフィズムでしょうか?多分組織型?どちらも何らかのタイプのゆがみが必要です。
ボーナスポイント:評価が返される可能性があることを確認して、失敗時に短絡するためにエルゴット代数を使用する必要がありLeft String
ますか?
recursion - F#: 相互に再帰的なデータ構造のカタモルフィズム
次の相互再帰構造を想定します。
目標: この構造の一般的なカタモルフィズムを生成します: foldl、foldr、foldk。
私は次のように素朴なカタモルフィズムを生成しました:
末尾再帰型の foldl (アキュムレータを使用) と末尾再帰型の foldr (継続を使用) を「機械的に」生成するにはどうすればよいですか?
私はScott の Recursive Types and Folds シリーズを読んでいて、再帰構造の折り畳みを「機械的に」生成する方法を理解しています。ただし、再帰的なデータ構造に対して「機械的な」ことを行うためにグーグルで何かを見つけることができません。
PS: インライン化することで上記の相互再帰を取り除くことができますが、tpetricek の Markdown パーサーでの相互再帰の単純化されたバージョンを表すため、そのままにしておきます。
c# - LINQ Aggregate Catamorpshim を使用して Single(OrDefault) を書き換える方法は?
Bart de Smetがかなり前に書いた記事を読んでいました。-再帰.aspx
Aggregate 演算子に関して LINQ で他のすべてのカタモルフィック演算子を定義することは、読者への演習として残されています。 -シンプル: (
Long )
Count 、Sum、Average、Min、Max思考: First (OrDefault)、Last (OrDefault)、Single (OrDefault)
Single() 拡張メソッドを除いて、ほぼすべてに Aggregate catamorphism を使用することができました。また、Contains() や First() のようないくつかのケースでは、適切に書き直されていないため、Aggregate catamorphism を停止する方法がよくわかりません (いくつかの条件に一致するアイテムが見つかったときはいつでも)。指定されたシーケンス全体の残りを反復する代わりに。
要約すると:
- Aggregate を使用して Single() 拡張メソッドを書き直すには?
- 指定されたシーケンスの残りの反復を続行せずにアイテムが見つかったときにアイテムを返すために、LINQ Aggregate カタモルフィズムを停止する方法 (たとえば、AggregateContains() は、値に一致する最初のアイテムに対して true を返し、反復を停止する必要があります)。