問題タブ [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.
f# - F#で識別された共用体を列挙する方法は?
F#で識別された共用体の可能な「値」をどのように列挙できますか?
Enum.GetValues(Type)
識別された共用体のようなものがあるかどうかを知りたいのですが、どのような種類のデータを列挙するかはわかりません。オプションごとに1つの項目を含む、識別された共用体のリストまたは配列を生成したいと思います。
.net - 識別された共用体でのF#でのandキーワードの使用
私は今日、次のDU宣言に直面しました。
ここで、なぜ、のand
代わりにキーワードを使用するのでしょうか。type
.net - 判別共用体と比較して、F# でレコード型を使用する場合の冗長性が高い
代わりに、メソッド判別共用体を使用することを選択した場合、物事はもう少し簡潔になります。
F# でレコード型を使用する場合、この種の冗長性を回避する方法はないと思います。私は正しいですか?
.net - F# の小さな AST に判別共用体またはレコード型のどちらを使用するかを選択する
非常に単純なおもちゃの言語パーサーを実装しているとしましょう。DU を使用するか、レコード タイプを使用するかを決定しています (両方の組み合わせでしょうか?)。言語の構造は次のようになります。
この単純な言語でのプログラムの例:
これをどのようにモデル化し、その理由を教えてください。
.net - F#で許可されている識別された共用体のケースを相互に参照していますか?
次の判別共用体はコンパイルに失敗します。
表示されたエラーは
最後のユニオンケースについて。
属性でタグ付けしようとExpression
しましたrec
が、役に立たないようです。
これに対する回避策はありますか? さらに良いことに、言及された理由が私のトラブルの原因ですか?
c# - F# 判別共用体と C# クラス階層
次のコードがあります。
F# からの良い翻訳なのだろうか
??
f# - 判別共用体の不変フィールド
メソッドとプロパティを判別共用体に追加できることは知っていますが、レコード内のフィールドのように、共用体が作成されるインスタンスのときに設定する必要がある不変フィールドを追加できますか?
私がやりたいことは、次のようにユニオン型とレコード型を組み合わせることだと思います:
これは有効な宣言ではありません。
これは、レコードタイプを作成することで解決できることを知っています:
可能であれば、最初の例と同様のことをしたいと思います。
f# - 差別された組合の比較
私は F# の初心者で、FParsec をいじっています。FParsec を使用して AST を生成します。FsUnit を使用して、パーサーのさまざまな部分に関するいくつかのテストを作成し、正しい操作を保証したいと考えています。
構文に少し問題があります(申し訳ありませんが、正確なコードは機能しています。後で特定の例を投稿できます)、2つの識別された共用体(1つは予想され、もう1つは実際の結果)を正確に比較するにはどうすればよいですか?誰かが FsUnit (または NUnit) を使用した小さなコード例を提供してくれませんか?
判別共用体の例 (非常に単純)
f# - F#の識別された共用体を印刷する
文字列を識別された共用体であるAST型に解析するF#プログラムを作成しています。
(Mono + Mac OS Xで)コードを実行するために使用するfsi
と、ASTは適切な形式で出力されます。しかし、私が使用するprintfn "%s" <| ast.ToString()
と、のようなものが得られますFSI_0002.Absyn+clazz
。ToString
識別されたすべての共用体タイプのメソッドを作成するのは大変な作業です。
値を印刷する方法を教えてくださいfsi
。
f# - F#で抽象構文木(AST)を変換する
決定論理表のASTを設計しようとしています。私のASTを表す識別された共用体で実行できるようにしたいことの1つは、さまざまな理由でその一部を変換することです。わかりやすくするために、例を示します
決定論理表
@ VAR = 10; Y;
上記は、ルールが1つあり、条件VAR = 10がYエントリでこのルールに入るため、読み取ることができます。
抽象構文木の定義(この例では簡略化されています)
レンダリング(変換前)
レンダリング(変換後)
次に、上記のツリーを変換して、エントリに表示されているルールを展開します。私の考えでは、再帰関数とパターンマッチングを使用してこれを行うことができますが、現在、頭を包むのに少し問題があります。
本質的に、私がやろうとしているのは、ConditionEntriesノードが表示されるたびに、ConditionがEntryと組み合わされているEntriesリストのすべての文字列に対して新しいルールを発行することだと思います。それは意味がありますか?
アドバイスをよろしくお願いします。
ps上記の例をコンパイルしようとはしていませんので、文法上の誤りはご容赦ください。