Ich könnte mich hier sehr irren, da ich keinen starken Hintergrund in theoretischer Mathematik oder funktionaler Programmierung habe, aber aus meinem kurzen Streifzug durch FP scheint es, dass Currying dazu neigt, eine Funktion mit N Argumenten in N Funktionen mit einem Argument zu verwandeln, während partielle Anwendung [in der Praxis] besser mit variablen Funktionen mit einer unbestimmten Anzahl von Argumenten funktioniert. Ich weiß, dass einige der Beispiele in früheren Antworten dieser Erklärung widersprechen, aber es hat mir am meisten geholfen, die Konzepte zu trennen. Betrachten Sie dieses Beispiel (der Kürze halber in CoffeeScript geschrieben, ich entschuldige mich, wenn es noch mehr Verwirrung stiftet, aber bitte fragen Sie nach, wenn Sie eine Klarstellung benötigen):
# partial application
partial_apply = (func) ->
args = [].slice.call arguments, 1
-> func.apply null, args.concat [].slice.call arguments
sum_variadic = -> [].reduce.call arguments, (acc, num) -> acc + num
add_to_7_and_5 = partial_apply sum_variadic, 7, 5
add_to_7_and_5 10 # returns 22
add_to_7_and_5 10, 11, 12 # returns 45
# currying
curry = (func) ->
num_args = func.length
helper = (prev) ->
->
args = prev.concat [].slice.call arguments
return if args.length < num_args then helper args else func.apply null, args
helper []
sum_of_three = (x, y, z) -> x + y + z
curried_sum_of_three = curry sum_of_three
curried_sum_of_three 4 # returns a function expecting more arguments
curried_sum_of_three(4)(5) # still returns a function expecting more arguments
curried_sum_of_three(4)(5)(6) # returns 15
curried_sum_of_three 4, 5, 6 # returns 15
Dies ist natürlich ein erfundenes Beispiel, aber beachten Sie, dass die teilweise Anwendung einer Funktion, die eine beliebige Anzahl von Argumenten akzeptiert, es uns ermöglicht, eine Funktion auszuführen, aber mit einigen vorläufigen Daten. Eine Funktion zu kuratieren ist ähnlich, ermöglicht es aber, eine Funktion mit N Parametern stückweise auszuführen, bis alle N Parameter berücksichtigt sind, aber nur solange.
Nochmals, das ist meine Meinung nach dem, was ich gelesen habe. Wenn jemand anderer Meinung ist, würde ich mich über einen Kommentar freuen und nicht über ein sofortiges Downvote. Wenn das CoffeeScript schwer zu lesen ist, besuchen Sie bitte coffeescript.org, klicken Sie auf "try coffeescript" und fügen Sie meinen Code ein, um die kompilierte Version zu sehen, die (hoffentlich) mehr Sinn ergibt. Vielen Dank!