問題タブ [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.
syntax - F#の計算式における `while`ループの役割は何ですか?
While
ビルダーオブジェクトのメソッドを定義する場合は、計算式while
で-loopsを使用できます。メソッドのシグネチャは次のとおりです。While
比較のために、For
メソッドのシグネチャは次のとおりです。
While
-methodでは、本体は単純な型であり、For
メソッドのような関数ではないことに注意してください。
let
計算式の中に関数呼び出しなどの他のステートメントを埋め込むことはできますが、それらはループ内while
で複数回実行することは不可能です。
while
-loopが複数回実行されず、単に繰り返されるのはなぜですか?なぜforループとの大きな違いがあるのですか?さらに良いことに、計算式でwhileループを使用するための意図された戦略はありますか?
f# - do! の異なる実装を行う方法はありますか? そしてさせてください!計算式で?
do には別の動作が必要です。そしてさせてください!私のカスタム計算式で。
私は次の方法でこれを達成しようとします:
しかし、コンパイラは私にエラーを与えます:
このプログラム ポイントより前の型情報に基づいて、メソッド 'Bind' の一意のオーバーロードを特定できませんでした。利用可能なオーバーロードを以下に示します (または [エラー リスト] ウィンドウに表示します)。型注釈が必要な場合があります。
do! の別の実装を行う方法はありますか? そしてさせて!?
f# - F# で計算式またはその他の構造を再試行する
例外がスローされた場合に操作を再試行できる計算式を F# で記述できるようにしたいと考えています。現在、私のコードは次のようになっています。
各関数を設定した回数だけ再試行できるようにする必要があります。これは別の場所で定義しています。
ここで計算式が役立つと考えていましたが、各右辺を Retryable<'T> に明示的にラップすることを削除するのにどのように役立つかわかりません
計算式は次のようになります。
モナドは大雑把に言えばラッパー型であることは理解していますが、これを回避する方法を望んでいました。演算子をオーバーロードし、操作を Retryable<'T> に変換するための非常に簡潔な構文を使用できることはわかっていますが、それは繰り返し/ラッピングをより簡潔にするだけです。それはまだそこにあります。各関数を Retryable<'T> にラップすることもできますが、繰り返しになりますが、投稿の上部で行われたことを実行することに価値はありません (各操作で再試行を呼び出します。少なくとも非常に明示的です)。
計算式はここでは間違った抽象化かもしれませんが、よくわかりません。ここで何ができるかについてのアイデアはありますか?
f# - カスタム ワークフロー ビルダーを使用している計算式によって生成されたこれらのエラーを修正するにはどうすればよいですか?
MSDNのドキュメントから、Runが実装されている場合、計算式の最後で自動的に呼び出されることを理解しています。次のように述べています。
計算式に対して生成されます。Run および/または Delay は、ワークフロー ビルダーで定義されていない場合は省略されます。Run が自動的に呼び出されたときに、ReaderBuilder が MyItem オブジェクトのリストを返すことを期待していました。したがって、タイプの不一致エラーが発生する理由がわかりません。エラーは、ここにリストされているコードの最後にある ProcedureBuilder foo 内の return ステートメントによって生成されます。ワークフロービルダーについて私が誤解していることと、私が間違って実装したことを誰か説明してもらえますか?
次のエラーが表示されます。
タイプ「リスト」はタイプ「ReaderBuilder」と互換性がありません
型制約の不一致。タイプ「リスト」はタイプ ReaderBuilder と互換性がありません タイプ「リスト」はタイプ「ReaderBuilder」と互換性がありません
f# - Rx Builder の実装を変更してスタック オーバーフロー例外を修正するにはどうすればよいですか?
F# Computation Expression 構文内で Reactive Extension を使用する Rx Builder を考え出そうとしています。スタックを吹き飛ばさないように修正するにはどうすればよいですか? 以下の Seq の例のように。また、Reactive Extensions の一部として、または .NET Framework の将来のバージョンの一部として、RxBuilder の実装を提供する計画はありますか?
asynchronous - 再帰計算式ビルダーを構築するにはどうすればよいですか
私がやりたいのは、変換関数を繰り返し渡して組み合わせた変換を受け取ることができる関数を持つことです。変換関数は 'a -> 'b の形式になります。
つまり、次のような固定ワークフローを構成するのではなく、
私はこれを行うことができるようにしたいと思います:
そのため、結合された入力を呼び出すだけで、ワークフローの結果を取得できます。
これは、値の制限に達したり、コンパイラがすべてのトランスフォーマーを同じ型に制限したりすることなく可能でしょうか?
f# - 多分計算ビルダーで遅延を実装する方法は?
これが私がこれまでに持っているものです:
whileLoop
ループをサポートするために正常に動作しfor
ますが、whileループがサポートされるようにする方法がわかりません。問題の一部は、whileループの変換でが使用delay
されることですが、この場合は理解できませんでした。以下の明らかな実装は、計算を遅らせることはなく、代わりに実行するため、おそらく間違っています。
遅延がないことも妨げtry...with
になりtry...finally
ます。
f# - F#: モナドのキーワード リストを拡張する方法はありますか?
F# モナド内で と言うlet!
と、コンパイラはそれをBind
モナド ビルダーで定義したメンバーに変換します。
ここで MSDNに示されているように、次のように言うことができるQuery モナドがあることがわかりました。
and はselect
、count
たとえばQueryBuilder
メンバーLinq.QueryBuilder.Selectおよびに変換されLinq.QueryBuilder.Count
ます。
私の質問は、このキーワードのメンバーへのマッピングは F# コンパイラに組み込まれていますか、それとも拡張可能ですか? たとえば、次のように言えますか。
どういうわけか、F# コンパイラにメソッドにbar
マップすることを伝えFooMonadBuilder.Bar()
ますか?
f# - fsharp / dotnet およびテンポラル データベース
一時的な認識をクラスにできるだけ直接統合する方法を探しています。私は、株価のように時間とともに大きく変化するデータを扱っているため、これにはおそらく注意が必要であり、「関心の分離」を確実にするために 1 か所で処理する必要があります。
時系列データ/データベースで同様の経験をしたことがありますか?
何を読む/知ることをお勧めしますか?
(私の計算の「地平線」を構成する指定された日付にスコープを取得するために、TimeSlice(date) 計算式ビルダーの周りに私の計算をラップすることを考えています。
f# - F# の計算式で新しいキーワードを定義する
F# 3.0 ベータ版には、多数の新しいキーワードを含むクエリ {}計算式が含まれています。
計算ビルダーで独自のキーワードを定義するにはどうすればよいですか?