問題タブ [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.
haskell - タプルの要素を Haskell の引数として関数にフィードしますか?
私の Haskell プログラムでは、printf を使用してタプルのリストをフォーマットしたいと考えています。リストに printf をマップして、次のように値を 1 つずつ出力できます。
私はこのようなことができるようにしたい:
ただし、これは 2 つの個別の値ではなく、タプルを printf に渡します。タプルをprintfの2つの引数に変換するにはどうすればよいですか?
functional-programming - カリー化の実際的な利点は何ですか?
カリー化手法とは何かについてのドキュメントや質問はたくさんありますが、実際にカリー化を使用する理由についての情報はほとんど見つかりませんでした。私の質問は、カリー化の利点は何ですか? おそらく、従来のメソッド呼び出しよりもカリー化の方が望ましい簡単な例を提供できます。
私は太陽が昇っている間は C++ で作業しているので、これまでのところ、仕事以外で言語をいじる以外にカレーに触れる機会はほとんどありませんでした。
c++ - 関数型の手法を使用するために STL コンテナーの for ループを作り直します
私は、メンバー関数を持つstd::vector
ポインターPerson
オブジェクトを持っていますstd::string getName() const
。STL アルゴリズムを使用して、 「Chad」Person
を返すベクトル内のすべてのオブジェクトをカウントしたいと考えています。getName()
ループを単純に反復する動作は次のようになります。
これを作り直して、すべての STL アルゴリズムとファンクターなどを使用するようにします (より機能指向にします)。これは私がする必要があると私が思うことです:
おそらくおわかりのように、これは機能しません。まず、私が理解しているように、 bind1st/bind2nd オブジェクトは bind1st/binder2nd オブジェクトで動作するように特別に設計されているため、使用できませんstd::binary_functions
。第二に、そしてもっと重要なことに、私は正しいテクニックを使っているとは思いません. 引数の1つを「チャド」にバインドしたいのですが、イテレータ引数を使用すると、実際には、バインドされたバージョンの を呼び出す前に、イテレータ値を文字列に変換したいだけですequals_to
。
Boost を使用してこれを行うことは可能だと思いますが、コア C++03 だけを使用して (つまり、C++0x ランバを使用しないで) 可能ですか?
編集: ユーザー定義の述語を使用しない (つまり、std ツールキットで提供されるツールを使用するだけの) 例を思いつく人はいますか?
編集: Matthieu の回答は STL アルゴリズムでファンクタを使用する方法についての教科書的な回答ですが、Cubbi の回答は私が探していたアプローチからのものでした (ただし、Mathieu は質問を編集してより具体的にする前に回答したため、お詫びします!)。
scala - Scalaで部分的に適用された関数から引数を取り戻す
すでに部分的に適用されている関数から引数を取り戻す方法はscalaにありますか?
これは意味がありますか、実行する必要がありますか、または任意のユースケースに適合しますか?
例:
def doStuff(lower:Int,upper:Int,b:String)=
for(turn <- lower to upper) println(turn +": "+b)
ある時点で「lower」引数を知っていて、それを「doStuff」に適用する関数を取得したと想像してください。
val lowerDoStuff = doStuff(3,_:Int,_:String)
その3を取り戻す方法はありますか?(例として、「lowerDoStuff」のみを受け取った関数の中にいて、最初の引数を知る必要があると想像してください)
慣用的なscalaは、内省/反省よりも好まれます(可能な場合)。
clojure - Clojureの高階関数
Clojureは素晴らしいです、私たちは皆これを知っています、しかしそれはポイントではありません。Haskellのような方法で高階関数を作成および管理する慣用的な方法は何でしょうか。Clojureでは、次のことができます。
ただし(sum 1)
、関数は返されません。エラーが発生します。もちろん、次のようなことができます。
この場合:
しかし、それは先に進む正しい方法のようには思えません。何か案は?
私はsum
関数の実装について話しているのではなく、より高いレベルの抽象化について話しているのです。従うべき慣用的なパターンはありますか?いくつかのマクロ?マクロを定義する最良の方法ですか、それとも代替ソリューションがありますか?
c# - 型引数の数が異なる Func 間の変換
さまざまな種類の Func デリゲートを変換するための組み込みメソッドはありますか? つまり、Func が必要であるが、Func を持っている (そして、T パラメーターに渡す必要がある値を持っている) とします。例えば:
私は次のように自分で書きました:
しかし、このようなメソッドのファミリが存在するかどうか (または、これを行うためのより良い方法がある場合でも) 疑問に思っています。
基本的に、私はこれを、メソッドにいくつかの定型コードがあり、その後に関数呼び出しが続く場合 (関数の数と型は異なりますが、戻り値の型は同じです)、その後にさらにボイラーが続く場合にこれを行っています。プレートコード。
すべての意見を歓迎します!ありがとう。
haskell - 部分的なアプリケーションは実行時にどのように表現されますか?
map (1+) list
Haskell のようなものを書くとき、 の内部表現は(1+)
何ですか? の部分適用なので(+)
、引数1
をどこかに保存しなければならないのですが、これが頭に浮かびません。カリー化と部分適用の実装方法を簡単に説明してもらえますか?
c# - .Netはカレージェネリックをサポートしていますか?
ネストされたジェネリッククラスがあるとします。
ここでtypeof(A<int>.B<>)
は、本質的に、最初のパラメーターのみがバインドされている2つのパラメーターを持つジェネリッククラスです。
2つのパラメータを持つ単一のクラスがある場合
「開いたまま」AB
を参照する方法はありT=int
ますか?U
そうでない場合、これはC#の制限ですか、それともCLRの制限ですか?
c# - C#でのカリー化式
Linq2SQLにフィードできる式ツリーを構築して、クリーンなクエリを生成しようとしています。私の目的は、任意の単語のセットをANDとNOT(またはORとNOT)にまとめるフィルターを作成することです。検索するフィールドを変更したいのでExpresssion<Func<T, string, bool>>
、さまざまなヘルパー関数を呼び出して、(Tは操作しているエンティティ)のリストを一緒に作成することが望ましいです。次に、単語の配列を受け取り、それらをループして、Expresssion<Func<T, bool>>
最終的に.Whereステートメントにフィードできるように構築します(必要に応じて特定の式を否定します)。
LINQKit PredicateBuilderを使用していますが、このコードは単一のパラメーター式を処理します。しかし、それは私自身の試みのためのいくつかの基礎を私に提供してくれました。私はこのようなことを目指しています:
しかし、式を使用しているので、>>>>でマークされた行は明らかに違法です(e(p, w)
関数の場合とは異なります)。だから私の質問は、複数のパラメーターを持つ関数を含む式に単一の変数(単語)を部分適用するにはどうすればよいですか?
さて、LINQPadをいじって、私に役立つ解決策を見つけました。この質問で私はそこにたどり着きました。私は表現ツリーを構築するのはかなり新しいので、改善や批判のあるコメント/回答をいただければ幸いです(そして賛成します)。