問題タブ [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 に答える
182 参照

f# - クエリ式の自己結合

である可能性のある候補に参加するためだけにラップするjoin必要がないように、このクエリ式の句を変更するにはどうすればよいですか?parent.IDoptionchild.ParentIDNone

ありがとう!

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

f# - 計算式のパラメータにアクセスできますか?

後で計算式の正規メソッドの 1 つで使用できる計算式でメソッドまたはスタンドアロン関数を作成することは可能ですか?

私はこのようなものが欲しい:

get_intしかし、コンパイラはそれが定義されていないと不平を言います。

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

f# - ワークフロー/モナドを別のワークフロー/モナドに埋め込みますか?

たとえば、ロギング用のワークフローがあり、ロギング ワークフローで非同期を使用したいと考えています。bind非同期ワークフローでロギングを呼び出す方法は?

編集:ワークフローを使用して AOP を置き換えて、F# の分野横断的な目的に使用することをお勧めします。埋め込みの問題を処理する方法がわかりません。または、ワークフローを使用するのは得策ではありませんか?

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

f# - F# の「ステートフル」計算式

私は現在 F# を学んでいて、いくつかのつまずきにぶつかっています。その多くは、機能的に考えることを学ぶことだと思います。

現時点で私が学んでいることの 1 つは計算式であり、追跡状態を処理する計算式を定義できるようにしたいと考えています。

myOptionsそれをにできるようにしたいOption<'T> listので、各let!バインド操作により、ビルダーは定義されたオプションを効果的に「追跡」します。

変更可能な状態を使用してそれを行う必要はありません。たとえば、ビルダーによってリストが維持され、bind呼び出しごとに更新されます。

これを可能にする方法はありますか?


更新:結果のOption<'T> list型は代表的なものにすぎません。実際にはOptionGroup<'T>、リストといくつかの追加情報を含む型がある可能性が高いため、ダニエルが以下で述べたように、単純なリストにリスト内包表記を使用できます。

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

f# - 計算式の if..then 構造の else 分岐で Zero を呼び出す背後にある直感

計算式のメソッドに関する msdn ドキュメントには、次のように記載されています。Zero

計算式elseの式の空の分岐に対して呼び出されます。if...then

定義されidentityていない計算ビルダーを使用しているとします。Zero

以下のコードは許可されています

ただし、次のコードは許可されておらず、コンパイラ エラーで失敗します。

この制御構造は、計算式ビルダーが「ゼロ」メソッドを定義する場合にのみ使用できます

コンパイラが分岐の呼び出しZeroを主張するのはなぜですか? elseこの背後にある直感は何ですか?

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

f# - (どのように) このモナドバインドを末尾再帰にすることができますか?

私はDesyncと呼ばれるこのモナドを持っています -

複数のゲーム ティックにわたって実行されるゲーム ロジックの実装を、計算式を使用して一見シーケンシャルなスタイルで記述できるようにします。

残念ながら、無制限の数のゲーム ティックの間持続するタスクに使用すると、StackOverflowException でクラッシュします。そして、クラッシュしていないときでも、このような扱いにくいスタック トレースになってしまいます -

バインド関数の左のケースを末尾再帰にすることで問題を解決したいと考えています。ただし、2つのことがわかりません-

1) できるかどうか、2) 実際にどのように行うか。

ここでバインドを末尾再帰にすることが不可能な場合、モナドを再構築して末尾再帰にできるようにする方法はありますか?

編集 3 (以前の編集を含む) : スタック オーバーフローを示すために使用する desync コンビネータを実装する追加のコードを次に示します。

ここにどちらかの実装があります -

最後に、スタック オーバーフローを発生させる単純なコード行を次に示します。

0 投票する
0 に答える
198 参照

f# - F# の計算式コンストラクターにパラメーターを追加できますか

次のコードを考えると

これをやりたい

しかし、私はこのエラーメッセージを受け取ります

私もこれを試しました

悲しいことに、すべてエラーが発生します。

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

f# - Builder Like DSL のネストされた計算式を作成できますか?

これは私がやりたいことです:

これは行で壊れます

このカスタム操作が実際に計算式を受け入れる必要があることを F# に説明する方法はありますか?