問題タブ [discriminated-union]
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.
algorithm - 動的集合演算 UNION は、2 つの互いに素な集合 S1 および S2 を入力として受け取ります
これは私が解決しようとした宿題の質問です.
動的集合演算 UNION は、2 つの互いに素な集合 S1 と S2 を入力として受け取り、S1 と S2 のすべての要素からなる集合 S = S1 U S2 を返します。集合S1およびS2は、通常、操作によって破壊される。適切なリスト データ構造を使用して O(1) 時間で UNION をサポートする方法を示します
一定時間で実行できる 2 つのリンクされたリストを作成することを考えていますが、そのためには、リストの最初 (先頭) と最後 (末尾) の両方の要素へのポインターを覚えておく必要があります。struct node{ char* word; 構造体ノード* 次; } struct Set{ struct node* head; } struct node* テール; ヘッド ポインターの横にあるすべてのリストについて、テール ポインターも保持します。O(1) 時間でユニオン演算をサポート: 2 つのセット S1 と S2 があるとします。
私のアプローチは正しい方向に向かっていますか?
dynamic - fsharpで判別共用体を動的に生成することは可能ですか?
私はSystem.ComponentModel.Composition
Fsharp での使用を検討していますが、メモリ内で判別共用体を動的に生成できるかどうか疑問に思っていましたか? インポートされた型の要素から構築された DU が欲しいです。主な理由は、DU で動作するコードがあり、それを .NET で使用するのが最も簡単だと思ったからComposition
です。私はこれが間違ったことであることを受け入れる準備ができています。
これまでいろいろと使ってきましたが、新しいものを作るのではなく、既存の DU を操作するためのもののようFSharpType
です。FSharpValue
申し訳ありませんが、どこから始めればよいかわからないため、「これを試してみました」というコード サンプルをまだ持っていません。
- 出来ますか?
- それはお勧めですか?
- コンポジションに由来するものを表現するために DU を実際に使用すべきではありませんか?
- 少し遅いですが、リフレクションを使用できてうれしいです。
編集
- DU に動的に追加することは可能/推奨されますか? (DU が存在する必要がある場合)
c++ - C++ 非 POD 共用体に関する質問
C++11 では、ユニオン内で非 POD 型を使用できるようになりました。次のコードがあるとします。
私のクラスのどこかで、一度にアクティブなメンバーは 1 人だけですが、私の質問はかなり単純です。
- uny のデフォルト値は何ですか? - 未定義?
- クラスが破棄されるたびに、(ユニオン内の) どのメンバーが破棄されますか?
- アクティブなメンバーを追跡するために std::typeinfo が必要だとしたら、デストラクタでそのメンバーに対して明示的にデストラクタを呼び出す必要がありますか?
- 非PODタイプを受け入れるようにユニオンを変更した言語提案へのリンクを持っている人はいますか?
f# - 判別共用体の F# の制限
パターン マッチングや判別共用体などの機能を利用するために、小さなコンパイラを C# から F# に移植しようとしています。現在、私は System.Linq.Expressions に基づくパターンを使用して AST をモデル化しています: 抽象基本 "Expression" クラス、各式タイプの派生クラス、および多数のキャストなしで式を切り替えることができる NodeType 列挙型。F# 判別共用体を使用してこれを大幅に削減することを望んでいましたが、いくつかの制限に遭遇しました。
- 強制的なパブリック デフォルト コンストラクター (System.Linq.Expressions が静的ファクトリ メソッドで行うように、式の構築で型チェックと引数の検証を行いたい)
- 名前付きプロパティの欠如 (これは F# 3.1 で修正されたようです)
- ケースタイプを直接参照できない。たとえば、共用体から 1 つの型のみを受け取る関数を宣言できないようです (たとえば、 (共用体型)
let f (x : TYPE) = x
に対してコンパイルしますが、 orに対してはコンパイルしません。これは、私の C# アプローチよりも型の安全性を犠牲にしているようです。Expression
Add
Expression.Add
イライラを軽減するこれらまたは設計パターンの適切な回避策はありますか?
types - 要素が特定の型コンストラクターから構築されたかどうかを判断する関数を定義できますか?
私は F# で作業しており、いくつかのものの識別結合である型 T を持っています。
T リストがある場合、A を使用して構築されたものを取り出したいと思うかもしれません。次のようにパターン マッチを行うのは簡単です。
埋め込みの一致は少し冗長であり、アンダースコアの数を A の定義と同期させるには、ちょっと面倒なメンテナンスがあります。私は次のような関数が本当に欲しいです:
この「constructedFrom」関数を定義する方法はありますか?
f# - f#でリストのユニオン値をアンラップする方法
単一の共用体型の値をアンラップするには、次のようにする必要があることを知っています。
しかし、私の質問は次のとおりです。リストに対してそれを行う方法がある場合は?:
ありがとう。
generics - Union<'a> を Union<'b> に変換する
次のように定義された F# 判別共用体があるとします。
たとえば、B
この where 'T
isがある場合、それを別のwhere is aint
に変換するにはどうすればよいですか? これに似たユニオンがありますが、より多くのケースがあり、現在、次のようにパターン マッチします。B
'T
string
f# - パターンマッチングにおけるF#慣用的なキャスト?
次のコードを想定します。
「メッセージ」が System.Object 型の場合、パターン マッチングを改善するためにできることはありますか? たとえば、一般的なアクティブパターンなどですか?
この質問は短すぎるかもしれませんが、上記の構文をより良くする方法があるかどうかを知りたいだけです