問題タブ [active-pattern]

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.

0 投票する
3 に答える
253 参照

f# - 差別共用体のカリー化された引数

私はこのような差別された組合を持っています:

次のようにパターン マッチする必要があります (かっこが必要なようです)。

代わりに、このようにアクティブなパターンのようなものと一致させる方法はありますか:

そうでない場合、カリー化された引数とのこのマッチングが機能せず、代わりにタプルの使用を強制するように F# が設計されているのはなぜでしょうか?

h::t編集:これは、タプルなどを使わずに使用できる F# リストに触発されたものです。ソースコードは次のようになります。

0 投票する
2 に答える
787 参照

f# - F# でブール関数をパターン識別子として使用する

これをグーグルで調べてみましたが、私がやろうとしていることを導く言葉のコレクションを見つけることができませんでした.

Project Euler Problem 54を解決しようとしていますが、このかなりばかげた機能があります。

すべてのisSomethingキーワードはstring array、ブール値を受け取って返す関数です。パターンマッチングを使用してこれを行うよりエレガントな方法はありますか?

これは機能しません:

私はこのようなものを探しています:

ある時点でそのようなものを見たのを覚えていますが、どこでどのように見つけたのか思い出せません。

0 投票する
1 に答える
164 参照

f# - パターン マッチングの「パラメーター」としての Union メンバーのサブセット

他のタイプのノードの中でも、いくつかのタイプのバイナリ ノードを持つツリーのタイプ定義を考えてみましょう。つまり、

たとえば、任意の種類のバイナリ ノードのサブノードを (新しいノードを構築することによって) 交換できる再帰関数を使用して、このツリーを操作したいと考えています。私を夢中にさせている問題: すべての BinaryNodes を一致させて Node フレーバーが「パラメーター」になり、そのフレーバーのスワップされたノードを返すために任意の BinaryNode フレーバーに適用できる汎用スワップを持たせるにはどうすればよいですか?

アクティブなパターンを使用して、BinaryNode であるすべての Tree を一致させる方法を知っています。

しかし、次のことは達成できないように見えるため、それだけでは十分ではありません。

つまり、BinaryNode フレーバーをあたかも a や b のようにパラメーターとして使用する方法が見つかりませんでした。代わりに、各 BinaryNode フレーバーを個別に一致させる必要があるようです。多数のバイナリ ノード フレーバーが存在する場合、これは実用的な意味を持つ可能性があります。型ツリーは、Fsyacc/Fslex で生成されたパーサー/レクサーの AST であり、それを再構築するためのオプションを制限します。何か案は?

0 投票する
2 に答える
253 参照

f# - 読みやすくするために F# パターン マッチングでコード ブロックを分割する

「match」を使用したパターン マッチングでは、各パターンのコードが大きくなる可能性があります。上記のFooを参照してください。読みやすさを向上させるために、ブロックを個別の呼び出しとして分割する必要があります。

これに関する問題は、上記のBarのように、パターンが一致していなくても呼び出しが評価される可能性があることです。

  • オプション 1: 遅延評価。
  • オプション 2: 引数/パラメーターを転送します。
  • オプション 3: 引数/パラメーターを転送し、アクティブなパターンを使用します。

各パターンのコードが大きくなる可能性がある場合に、読みやすさを改善するための推奨される方法は何ですか。または、問題に対する他の明白な解決策はありますか?