問題タブ [currying]
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.
c# - C#でカリー化する利点は何ですか? (部分的な機能を達成する)
C#でカリー化する利点は何ですか?
カリー化された関数で部分的な関数の適用を実現する利点は何ですか?
function - メソッド呼び出しを説明するには?
小さな方法を考えてみましょう:
そしていくつかの呼び出し:
これを非技術者にどのように説明しますか? 誰か良い比喩を持っていますか?
メソッド呼び出し(または関数適用)を何度か説明しようとしましたが、失敗しました。ここでは適切な言葉が見つからないようです。
よろしく、フォーキ
更新:パラメータがどのように渡されるか/一致するかを説明することが重要です。
c# - 課題: C#4 の string.Join の部分的なカリー化または部分適用のより適切な方法
バックグラウンド
私は最近、.NET 4 の System.String クラスに Join メソッドの新しいオーバーロードがあることを読みました。この新しいオーバーロードは区切り記号を取り、IEnumerable<T>
中間の文字列配列に変換する必要なく、任意のコレクションを 1 つの文字列に結合できるようにします。
涼しい!つまり、これを実行できるようになりました。
...これの代わりに:
...したがって、すべてのアイテムを文字列に変換してから、配列を割り当てる必要がありません。
問題
ただし、プログラミング全般の関数型スタイルのファンであり、特に C# でのメソッド チェーンのファンである私は、次のようなものを記述できるようにしたいと考えています。
ただし、これは正当な C# ではありません。はい、私はでそれを行うことEnumerable.Aggregate
ができました、そして、はい、私は独自の Join 拡張メソッドでそれを行うことができました )、しかし、これらのアプローチは読みにくい/非効率的であり、(それぞれ)警官のように感じるので、試してみたいと思いますそれは別の方法です。これまでに得た最も近いものは次のとおりです。
...次の拡張メソッドを使用:
これは非常に冗長で、引数の 1 つを IEnumerable ではなく IEnumerable として定義しているため、パラメーターと戻り値の型を明示的に定義する必要があります。
チャレンジ
メソッド連鎖スタイルのプログラミングを使用して、これを達成するためのより適切な方法を見つけることができますか?
この課題は、C# で、複数のオーバーロードを持つ関数をカリー化するための簡潔な方法を見つけようとすることです。これはただの楽しみです。
f# - F# カリー化効率?
次のような関数があります。
この関数を使用して、要素が意味的に何らかのセットの一部であるかどうかをすばやく確認できます。たとえば、ファイル パスが html ファイルに属しているかどうかを確認するには、次のようにします。
ただし、上記のような関数を使用すると、「isInSet」に記述されている関数本体の評価が、すべてのパラメーターが判明するまで遅れるように見えるため、パフォーマンスが低下します。特に、(Set.ofList setElems).Contains
の実行ごとに再評価されるなどの不変ビットisHtmlPath
。
F# の簡潔で読みやすい性質を維持しながら、セットの構築が事前に評価されるより効率的な動作を維持するにはどうすればよいでしょうか。
上記は単なる例です。実装の詳細で行き詰まるのを回避する一般的なアプローチを探しています。実装の実行順序などの詳細に気を取られないようにしたいのですが、それは通常私にとって重要ではなく、主要なセールスポイントを損なうようなものだからです。関数型プログラミングの。
language-agnostic - カリー化は継承を回避するための単なる方法ですか?
したがって、カリー化についての私の理解(SOの質問に基づく)は、関数のパラメーターを部分的に設定し、結果として「切り捨てられた」関数を返すことができるということです。
大きな毛むくじゃらの関数がある場合、10個のパラメーターを取り、次のようになります
を除くすべてのプリセットを処理できる「サブセット」関数がjumpShot%
必要な場合は、元の関数から継承するクラスを分割する必要がありますか?
私が探しているのは、このパターンのユースケースだと思います。ありがとう!
function - OCaml: 値を定義せずにカリー化する
f と g の 2 つの関数があり、しようとしてreturn f(g(x))
いますが、x の値がわからず、どうすればよいかわかりません。
より具体的な例: 関数がf = x + 1
ありg = x * 2
、しようとしている場合、次return f(g(x))
の関数を取得する必要があります。(x*2) + 1
programming-languages - 名前付きパラメータが省略されたときにカリー化を実行するプログラミング言語はありますか?
関数型プログラミング言語の多くは、カリー化されたパラメーターをサポートしています。カリー化関数をサポートするために、関数へのパラメーターは本質的にタプルであり、最後のパラメーターを省略して、より小さなタプルを必要とする新しい関数を作成できます。
関数パラメーターに常にレコード (名前付きパラメーター) を使用する言語を設計することを考えています。
したがって、私の偽物の言語の単純な数学関数は次のようになります。
これらの 2 つの名前付きパラメーターがある限り、これらの関数に任意のレコードを渡すことができます (「左」と「右」だけを使用することもできます)。
名前付きパラメーターが 1 つしかない場合は、新しい関数が作成されます。
上記の Haskell の表記の一部をお借りしています。
これを行う言語を見た人はいますか?
python - ループ内のPythonのカリー化関数
だからここに私が取り組んできたものを単純化するいくつかのコードがあります:
そして、ここにその出力があります:
チャーリー、次にシンディを期待しますが、なぜシンディが2回表示されるのですか?
django - Django - スーパーユーザーへの URL アクセスを制限する
私のurlconfには、次のものがあります。
私がやりたいことは、このアプリケーションへのアクセスをスーパーユーザーに制限することです。私はこれを試しました:
しかし、decorate はちょうど 1 つの引数を取ると不平を言い、私は 2 つ与えました。
functools.partial を介してデコレータをカリー化することを考えていますが、より明白な解決策が欠けている可能性があると考えました。
f# - F#で中間関数の引数をカレーすることは可能ですか?
正常に機能するコードは次のとおりです。
したがって、式「h 1」を記述でき、FSIは次のように表示します。
「h123」と呼ぶと、引数は正しい順序で適用されます。
しかし、最後の引数のタイプが異なる場合、状況は異なります。
ここで、最後の関数hhによりエラーメッセージが表示されます。
Script.fsx(119,10):エラーFS0001:タイプの不一致。期待している
string -> 'a
が与えられたint -> string -> int
。タイプがタイプstring
と一致しませんint
これが発生する理由を理解しています。「z」が「ffx」に追加され、2番目の引数になります。しかし、最初の例では、式「h 1 2 3」が正しく機能しない(「f 1 3 2」として実行される)と予想します。しかし、それはうまく機能します。