問題タブ [computation-expression]

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 投票する
1 に答える
796 参照

syntax - F#の計算式における `while`ループの役割は何ですか?

Whileビルダーオブジェクトのメソッドを定義する場合は、計算式whileで-loopsを使用できます。メソッドのシグネチャは次のとおりです。While

比較のために、Forメソッドのシグネチャは次のとおりです。

While-methodでは、本体は単純な型であり、Forメソッドのような関数ではないことに注意してください。

let計算式の中に関数呼び出しなどの他のステートメントを埋め込むことはできますが、それらはループ内whileで複数回実行することは不可能です。

while-loopが複数回実行されず、単に繰り返されるのはなぜですか?なぜforループとの大きな違いがあるのですか?さらに良いことに、計算式でwhileループを使用するための意図された戦略はありますか?

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

f# - do! の異なる実装を行う方法はありますか? そしてさせてください!計算式で?

do には別の動作が必要です。そしてさせてください!私のカスタム計算式で。

私は次の方法でこれを達成しようとします:

しかし、コンパイラは私にエラーを与えます:

このプログラム ポイントより前の型情報に基づいて、メソッド 'Bind' の一意のオーバーロードを特定できませんでした。利用可能なオーバーロードを以下に示します (または [エラー リスト] ウィンドウに表示します)。型注釈が必要な場合があります。

do! の別の実装を行う方法はありますか? そしてさせて!?

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

f# - F# で計算式またはその他の構造を再試行する

例外がスローされた場合に操作を再試行できる計算式を F# で記述できるようにしたいと考えています。現在、私のコードは次のようになっています。

各関数を設定した回数だけ再試行できるようにする必要があります。これは別の場所で定義しています。

ここで計算式が役立つと考えていましたが、各右辺を Retryable<'T> に明示的にラップすることを削除するのにどのように役立つかわかりません

計算式は次のようになります。

モナドは大雑把に言えばラッパー型であることは理解していますが、これを回避する方法を望んでいました。演算子をオーバーロードし、操作を Retryable<'T> に変換するための非常に簡潔な構文を使用できることはわかっていますが、それは繰り返し/ラッピングをより簡潔にするだけです。それはまだそこにあります。各関数を Retryable<'T> にラップすることもできますが、繰り返しになりますが、投稿の上部で行われたことを実行することに価値はありません (各操作で再試行を呼び出します。少なくとも非常に明示的です)。

計算式はここでは間違った抽象化かもしれませんが、よくわかりません。ここで何ができるかについてのアイデアはありますか?

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

f# - カスタム ワークフロー ビルダーを使用している計算式によって生成されたこれらのエラーを修正するにはどうすればよいですか?

MSDNのドキュメントから、Runが実装されている場合、計算式の最後で自動的に呼び出されることを理解しています。次のように述べています。

計算式に対して生成されます。Run および/または Delay は、ワークフロー ビルダーで定義されていない場合は省略されます。Run が自動的に呼び出されたときに、ReaderBuilder が MyItem オブジェクトのリストを返すことを期待していました。したがって、タイプの不一致エラーが発生する理由がわかりません。エラーは、ここにリストされているコードの最後にある ProcedureBuilder foo 内の return ステートメントによって生成されます。ワークフロービルダーについて私が誤解していることと、私が間違って実装したことを誰か説明してもらえますか?

次のエラーが表示されます。

タイプ「リスト」はタイプ「ReaderBuilder」と互換性がありません

型制約の不一致。タイプ「リスト」はタイプ ReaderBuilder と互換性がありません タイプ「リスト」はタイプ「ReaderBuilder」と互換性がありません

0 投票する
5 に答える
1478 参照

f# - Rx Builder の実装を変更してスタック オーバーフロー例外を修正するにはどうすればよいですか?

F# Computation Expression 構文内で Reactive Extension を使用する Rx Builder を考え出そうとしています。スタックを吹き飛ばさないように修正するにはどうすればよいですか? 以下の Seq の例のように。また、Reactive Extensions の一部として、または .NET Framework の将来のバージョンの一部として、RxBuilder の実装を提供する計画はありますか?

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

asynchronous - 再帰計算式ビルダーを構築するにはどうすればよいですか

私がやりたいのは、変換関数を繰り返し渡して組み合わせた変換を受け取ることができる関数を持つことです。変換関数は 'a -> 'b の形式になります。

つまり、次のような固定ワークフローを構成するのではなく、

私はこれを行うことができるようにしたいと思います:

そのため、結合された入力を呼び出すだけで、ワークフローの結果を取得できます。

これは、値の制限に達したり、コンパイラがすべてのトランスフォーマーを同じ型に制限したりすることなく可能でしょうか?

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

f# - 多分計算ビルダーで遅延を実装する方法は?

これが私がこれまでに持っているものです:

whileLoopループをサポートするために正常に動作しforますが、whileループがサポートされるようにする方法がわかりません。問題の一部は、whileループの変換でが使用delayされることですが、この場合は理解できませんでした。以下の明らかな実装は、計算を遅らせることはなく、代わりに実行するため、おそらく間違っています。

遅延がないことも妨げtry...withになりtry...finallyます。

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

f# - F#: モナドのキーワード リストを拡張する方法はありますか?

F# モナド内で と言うlet!と、コンパイラはそれをBindモナド ビルダーで定義したメンバーに変換します。

ここで MSDNに示されているように、次のように言うことができるQuery モナドがあることがわかりました。

and はselectcountたとえばQueryBuilderメンバーLinq.QueryBuilder.Selectおよびに変換されLinq.QueryBuilder.Countます。

私の質問は、このキーワードのメンバーへのマッピングは F# コンパイラに組み込まれていますか、それとも拡張可能ですか? たとえば、次のように言えますか。

どういうわけか、F# コンパイラにメソッドにbarマップすることを伝えFooMonadBuilder.Bar()ますか?

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

f# - fsharp / dotnet およびテンポラル データベース

一時的な認識をクラスにできるだけ直接統合する方法を探しています。私は、株価のように時間とともに大きく変化するデータを扱っているため、これにはおそらく注意が必要であり、「関心の分離」を確実にするために 1 か所で処理する必要があります。

時系列データ/データベースで同様の経験をしたことがありますか?

何を読む/知ることをお勧めしますか?

(私の計算の「地平線」を構成する指定された日付にスコープを取得するために、TimeSlice(date) 計算式ビルダーの周りに私の計算をラップすることを考えています。

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

f# - F# の計算式で新しいキーワードを定義する

F# 3.0 ベータ版には、多数の新しいキーワードを含むクエリ {}計算式が含まれています。

計算ビルダーで独自のキーワードを定義するにはどうすればよいですか?