問題タブ [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.
f# - ゼロを使った計算式
計算式を使用する場合、最初の定義は機能しますが、ゼロでは 2 番目の定義は機能しません。
これの違いは何ですか:
この:
1 番目は に評価されunit -> int
、2 番目は に評価され(unit -> int)
ます。違いはなんですか?
f# - Rx用のF#ワークフロービルダー
ここにRx用の素晴らしいF#ワークフロービルダーがあります:
http://blogs.msdn.com/b/dsyme/archive/2011/05/30/nice-f-syntax-for-rx-reactive-extensions.aspx
私はワークフローのUsing実装を作成しようとしていますが、壁に頭をぶつけ続けています。多分ここでは手遅れです。
これをどのように作成しますか?
前もって感謝します。
f# - 継続モナドの StackOverflow
次の継続モナドを使用します。
以下でスタックオーバーフローが発生する理由がわかりません。
以下はそうではありませんが:
f# - F#計算式:`for`を使用して`seq`を返す方法は?
基本的にStateモナドを実装する計算式を作成していて、式を使用しようとしていますfor
。
ボイラープレート関数forLoop
またはを使用することもできますが、それらはすべて、さらに式で処理できるMBuilder.For()
素敵なものを返します。しかし、式で同じことをしようとすると、コンパイルに失敗し、内部の式はを返す必要があることを通知します。M<seq<'U>, _>
let!
for
for
unit
小さくできない大きなコードブロックでごめんなさい。
今、私はループを使おうとしています。次の3つの呼び出しは期待どおりに機能し、の要素の数だけ状態をインクリメントしますmyList
。彼らはまたstring seq
、明らかに最後の呼び出しを除いて、美しいものを返します:
ただし、以下はコンパイルされません。error FS0001: This expression was expected to have type M<'a,int> but here has type unit
だから私の質問は-私は何を間違っているのですか?
また、ここFor
で説明する2つのオーバーロードと、両方の使用方法について少し混乱しています。
f# - F#の計算式で(クラスではなく)ビルダーオブジェクトが必要なのはなぜですか?
F#の計算式の構文は次のとおりです。
ident
ビルダーオブジェクトはどこにありますか(この構文はDon Symeの2007年のブログエントリから取得されています)。
私が見たすべての例で、ビルダーオブジェクトはシングルトンインスタンスであり、起動するためにステートレスです。Donは、次のようなビルダーオブジェクトを定義する例を示していますattempt
。
私の質問:AttemptBuilder
F#が計算式でクラスを直接使用しないのはなぜですか?確かに、この表記は、インスタンスメソッド呼び出しと同じくらい簡単に静的メソッド呼び出しに糖分を取り除くことができます。
インスタンス値を使用するということは、理論的には、同じクラスの複数のビルダーオブジェクトをインスタンス化できることを意味します。おそらく、何らかの方法でパラメーター化されているか、可変の内部状態でさえ(天国では禁止されています)。しかし、それがどのように役立つか想像できません。
更新:上記で引用した構文は、ビルダーが単一の識別子として表示される必要があることを示唆しています。これは誤解を招きやすく、おそらく以前のバージョンの言語を反映しています。最新のF#2.0言語仕様では、構文を次のように定義しています。
これにより、(ビルダーオブジェクトに評価される)任意の式を構成の最初の要素として使用できることが明確になります。
asynchronous - F#非同期と多分計算式を組み合わせる
ワークフローOption
でしばらく戻りたいとしましょう:async
理想的には、非同期を実行することを避けるために、非同期と同時にFSharpxからの多分計算式を使用しmatch
ます。カスタムビルダーを作成することはできますが、2つの計算式を一般的に組み合わせる方法はありますか?次のようになります。
f# - ネストされたブールテストのF#計算式?
F#モナド(ワークフロー)について十分に理解しているので、コード内でそれらを実装することが理にかなっている場所がいくつかあります。
たとえば、複数のネストされたif / thenを持つ関数があります。つまり、関数は、データが途中で特定の「テスト」に合格する限り継続する必要があります。
私は「たぶん」モナドに精通していますが、私が見たすべての例では、let!
バインディングを操作するようにコード化されていますが、これは私が行っていません。let
バインドではなく、ネストされたブール型テスト用に調整された「多分」ワークフローの例を誰かが提供してくれることを期待しています。
f# - F# 計算式を定義するときの Zero メンバーの目的は何ですか?
F# 演算式を学習しようとしています。一般的に、Zero メンバーの目的は何ですか?
シーケンスの定義は何ですか?
非同期ワークフローの定義は何ですか?
f# - F# でクエリ式を作成するにはどうすればよいですか?
ここでクエリ式を見てきましたhttp://msdn.microsoft.com/en-us/library/vstudio/hh225374.aspx
そして、なぜ次のことが正当なのか疑問に思っていました
しかし、あなたは本当にこのようなことをすることはできません
確かに、F# ではこのような構成可能性が許可されているため、述語を再利用できますか?? クリスマスのタイトルを特定の日付の前などの別の述語と組み合わせたい場合はどうすればよいでしょうか? クエリ全体をコピーして貼り付ける必要がありますか? C# はこれとはまったく異なり、述語を作成して結合する方法がいくつかあります。
f# - for..in.do を使用しない拡張演算式
拡張計算式とは、CustomOperation属性で定義されたカスタム キーワードを使用した計算式のことです。
拡張された計算式について読んでいるときに、@kvb による非常にクールな IL DSL に出くわしました。
コンストラクトを使用せずに操作がどのように構成されているのだろうかfor..in..do
。私の直感では、それはx.Zero
メンバーで始まるということですが、それを確認するための参照は見つかりませんでした.
上記の例が技術的すぎる場合は、スライドのコンポーネントが なしでリストされている同様の DSL を次に示しますfor..in..do
。
密接に関連する質問がいくつかあります。
- メンバーなしで拡張された計算式をどのように定義または使用しますか
For
(つまり、小さな完全な例を提供します)? それらがもはやモナドでなくても、私はあまり心配していません。DSL の開発に興味があります。 let!
とで拡張計算式を使用できますreturn!
か? はいの場合、そうしない理由はありますか?let!
と を使用した例に遭遇したことがないため、これらの質問をしreturn!
ます。