私は関数型プログラミングに関する記事を毎日読んでおり、可能な限りいくつかのプラクティスを適用しようとしています。しかし、私はカレーや部分的なアプリケーションで何がユニークなのか理解していません。
例として、このGroovyコードを見てみましょう。
def mul = { a, b -> a * b }
def tripler1 = mul.curry(3)
def tripler2 = { mul(3, it) }
私は違いが何であるかを理解していないtripler1
とtripler2
。どちらも同じではないですか?「カレー化」は、Groovy、Scala、Haskellなどの純粋または部分的な関数型言語でサポートされています。ただし、別の名前付きまたは匿名を作成するだけで、同じこと(左カレー、右カレー、nカレー、または部分アプリケーション)を実行できます。tripler2
ほとんどの言語(Cでも)でパラメーターを元の関数(など)に転送する関数またはクロージャー
ここで何か不足していますか?Grailsアプリケーションでカレーや部分的なアプリケーションを使用できる場所はありますが、「どうして違うの?」
教えてください。
編集:皆さんは、デフォルトのパラメーターを元の関数に転送する別の関数を作成/呼び出すよりも、部分的なアプリケーション/カリー化が単に効率的であると言っていますか?
f x y = x + y
意味しf
ます。f x
(にf
適用x
)の結果は、1つのintパラメータを取る関数です。結果f x y
(または(f x) y
にf x
適用されるy
)は、入力パラメーターをとらず、reduceによって評価される式x + y
です。