Diskussion:Currying

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 4 Jahren von Diaspomod in Abschnitt Die Defintion ist falsch
Zur Navigation springen Zur Suche springen

Abschnitt Currying #Besonderheiten[Quelltext bearbeiten]

Das Beispiel mit addiere will mir nicht einleuchten. Beim Aufruf von addiere 3 gibt es ja genau ein Argument, eben „3“. Was/Wo sind die anderen Argumente zu denen jeweils 3 addiert wird? --Geri 04:13, 1. Jan. 2010 (CET)Beantworten

Üblicherweise hat die Addition zwei Argumente. Auch im Artikel werden zwei (oder mehr) Argumente angenommen, da addiere "currying-fähig" sein soll. "addiere 3 5" hätte als Ergebnis 8. "addiere 3" hätte jedoch als Ergebnis eine Funktion, die zu ihrem zweiten Argument 3 addiert. Das sähe zum Beispiel in Haskell so aus:
      addiere x y = x + y
      addiere3 = addiere 3
      ergebnis = addiere3 5 -- ergebnis = 8
      ergebnis = addiere3 7 -- ergebnis = 10
Die Haskell-Syntax verschleiert hier das Currying, man könnte genauso auch schreiben:
      addiere = \x -> (\y -> (x + y))
--Zahnradzacken 19:28, 1. Jan. 2010 (CET)Beantworten
(Bearbeitungskonflikt - Auf dieser Seite! ;-)) Genau. --Erzbischof 19:34, 1. Jan. 2010 (CET)Beantworten

"selten auch"[Quelltext bearbeiten]

Iat "schönfinkeln" in _deutschen_ Texten wirklich selten gegenüber "Currying"? Wenn das nicht überzeugend (Suchmaschinen genügen nicht, die unterscheiden nicht mal zuverlässig zwischen Deutsch und Englisch) belegt wird, werde ich mindestens das "selten" demnächst mal löschen. Mark (Diskussion) 23:59, 16. Mai 2012 (CEST)Beantworten

Daraus, dass du kein Zitat dafür findest, dass "Schönfinkeln" selten sei, kannst du nicht schließen, dass es nicht selten ist. Also wenn, dann mach' die ganze Klammer weg, oder belege, dass es nicht selten ist. --Daniel5Ko (Diskussion) 02:15, 17. Mai (CEST)
Ich will dem Artikel keine Behauptung hinzufügen, sondern eine zweifelhafte und unbelegte Behauptung entfernen. Dazu braucht es keinen Beleg, dass das Gegenteil wahr ist. 46.115.35.111 14:49, 18. Mai 2012 (CEST) (hoppla, abgemeldet - der Beitrag ist von mir. Mark (Diskussion) 14:50, 18. Mai 2012 (CEST))Beantworten
Wenn du nur das "selten" entfernst, entfernst du nicht eine unbelegte Behauptung, sondern ersetzt eine unbelegte Behauptung durch eine andere. Ich hab' jedenfalls noch nie gesehen, dass das Verb "Schönfinkeln" einfach so benutzt wird (hab' allerdings auch noch nie absichtlich danach gesucht). Was man hingegen häufiger mal sieht, ist die zitierte Verwendung in Sätzen wie "eigentlich müsste es 'Schönfinkeln' heißen, hat sich aber nicht durchgesetzt" o.ä. --Daniel5Ko (Diskussion) 17:16, 18. Mai 2012 (CEST)Beantworten
So, nach einigen Jahren war ich jetzt mal mutig und habe das "selten" entfernt, allerdings nicht ersatzlos, sondern mit Hinweis auf das Fach, in dem der Begriff nicht selten ist. Hintergrund: Mit "Semantics in Generative Grammar" haben Irene Heim und Angela Kratzer ein, wohl sogar das, Standardwerk zu den Grundlagen der Semantik verfasst. Da belassen sie es aber gerade nicht bei "eigentlich müsste es 'Schönfinkeln' heißen, hat sich aber nicht durchgesetzt", sondern sagen eher, dass der Begriff "Schönfinkeln" (genauer "Schönfinkelisation", das Buch ist in englischer Sprache verfasst) angebracht ist und es keinen guten Grund gibt, statt dessen "currying" zu verwenden, so dass sie das nun auch tun werden. Zumindest in Deutschland (mit Linguisten aus anderen deutschsprachigen Staaten hatte ich bisher leider wenig zu tun) haben sie ihre Kollegen damit offenbar ganz gut überzeugt. --Mark (Diskussion) 00:54, 22. Nov. 2015 (CET)Beantworten

Motivation[Quelltext bearbeiten]

Wie wäre es mit einem simplen Beispiel in dem die Verwendung von Currying auf irgendeine Weise Codezeilen oder Ressourcen einspart? Das Javascript Beispiel ist zwar aus technischer Sicht eine gute Erklärung, allerdings bleibt der Sinn weiter offen... (nicht signierter Beitrag von 80.121.157.250 (Diskussion) 15:06, 29. Mär. 2013 (CET))Beantworten

Currying hat nichts mit Codezeilen- oder Ressourcen-Ersparnis zu tun. Es stimmt leider, dass der Artikel den Zweck unzureichend erklärt. Allerdings gibt der Abschnitt Anwendung schon einen Rahmen vor, worin der Nutzen besteht. --Zahnradzacken (Diskussion) 11:11, 30. Mär. 2013 (CET)Beantworten

Eine etwas weniger glatteisige Variablenbezeichnung im JavaScript-Beispiel[Quelltext bearbeiten]

Die Doppelverwendung von y und y für zwei nichtselbe Veränderliche ist obfuszierend-irreführend; ich habe das ausgebessert und habe die Veränderlichen y und yy genannt. –– Detlef Lindenthal (Diskussion) 10:26, 3. Nov. 2015 (CET)Beantworten

Javascript-Beispiel komplett überarbeiten[Quelltext bearbeiten]

Ich bin zwar kein Experte bezüglich Currying aber erfahrener Programmierer. Beim javascript-Beispiel stehen mir die Haare zu berge. Wer kommt denn auf die Idee ohne Not eine Funktion zu schreiben, deren Returnwert abhängig vom Wert eines Parameters mal eine Zahl und mal eine Funktion zurückgibt? Das würde man doch hoffentlich immer so lösen, dass man eine Funktion

function addiere(x,y) { return x + y; }

und eine Funktion

function erzeugeVerschiebefunktion(x) { return function(y){ return addiere(x, y); }; }

schreibt. Dann weiß der Leser des verwendenden Codes beim Aufruf von "addiere", dass das Ergebnis eine Zahl ist, und beim Aufruf von "erzeugeVerschiebeFunktion", dass das Ergebnis eine Funktion ist.

Außerdem musste ja im Beispiel die Möglichkeit zum Currying vom Ersteller der Funktion bereits eingebaut werden. Relevant wird Currying für mich dann, wenn man ein Werkzeug hat (sei es als Sprachelement, sei es durch ein Framework vorgegeben), das einem das Currying jeder beliebigen Funktion erlaubt, ohne dass das beim Erstellen der Funktion extra vorbereitet werden musste. Ein solches Werkzeug steht in javascript mit der Funktion bind() zur Verfügung. bind() ermöglicht einem daneben (und dazu wird es wohl hauptsächlich eingesetzt) auch noch den this-Kontext einer Funktion zu setzen. Wenn man den this-Kontext als einen speziellen Parameter ansieht, der halt in der Sprache mit einem etwas eigenartigen Mechanismus an die Funktion übergeben wird, so ist das aber eigentlich auch Currying.

Wenn es da keinen Widerspruch gibt, würde ich das Beispiel in nächster Zeit mal entsprechend umschreiben. Grüße Stephan (Diskussion) 22.12.2017

Zusatz: Ich sehe gerade, dass laut Definition Currying aus einer Funktion mit mehreren Argumenten immer eine Funktion mit genau einem Argument macht. Ist das wirklich so eingeschränkt? Ich hätte als Currying den Vorgang angesehen, der aus einer Funktion mit n Argumenten durch festklemmen von k<=n Argumenten eine Funktion mit n-k Argumenten macht. Grüße Stephan (Diskussion) 22.12.2017

Die Defintion ist falsch[Quelltext bearbeiten]

Alte falsche Definition: "Die Umwandlung einer Funktion mit mehreren Argumenten in eine Funktion mit einem Argument."

Sie ist falsch weil Currying auch die Umwandlung einer Funktion mit 3 Argumenten in einer Funktion mit 2 Argumenten erlaubt.

Beispiel:

add x y z = x+y+z

add2 = add 2 == add x y = x+y+2

Nicht jede partielle Anwendung ist Currying. --Diaspomod (Diskussion) 13:30, 6. Aug. 2019 (CEST)Beantworten