Ich versuche, die Ursache und Wirkung Logiken hinter „Currying“ und zu folgenden Ergebnissen kommt, um herauszufinden:Warum Haskell ein Argument nimmt
kann- Mehrere Argumente Funktion entweder als Tupel ausgedrückt werden (Kombination mehrerer Argumente mit verschiedenen Typen als ein Argument) und Liste (mehrere Argumente mit demselben Typ wie ein Argument kombinieren). So können alle Funktionen als einzelne Argumentfunktion ausgedrückt werden.
- Also in Haskell, Funktion nimmt nur ein Argument.Wie können wir multiple-Argumente Funktion implementieren.
- Verwenden von Curry. Curry ist eine Möglichkeit, mehrere Argumentfunktionen zu implementieren.
Ich denke, die obige Logik 1 -> 2 -> 3 ist verwirrend zu beantworten "warum mit Currying". Für die Aussage 3 kann man auch mehrere Tupel oder Listen als einzelnes Argument zur Implementierung mehrerer Argumente kombinieren.
Es scheint Aussage 1 ist nicht richtig Grund für Aussage 2. Was bin ich sicher, ist 2-> 3 ist richtig Argumentation, aber was ist der Grund hinter 2? Warum hat Haskell als funktionale Sprache nur ein Argument?
Die meisten Bücher nehmen Aussage 2 als eine akzeptierte Tatsache. Kennt jemand den Grund hinter 2? Oder kennt jemand die richtige Logik hinter "warum currying"?
Sie fragen: "Warum Curry verwenden?", Was bedeutet, dass irgendwann jemand dachte: "Lassen Sie uns currying verwenden, um ein Sprachdesignproblem zu lösen, das wir haben." Aber so ist es nicht wirklich passiert. Jemand dachte: "Lasst uns eine Sprache schaffen, die einfach, elegant, ausdrucksstark, bequem, sicher und flexibel ist." Die Lösungen für diese Probleme sind die Verwendung eines Lambda-Kalküls mit induktiven Typen, ein nettes Typsystem und eine etwas ungewöhnliche Reduktionsstrategie. "Currying" ist keine Lösung für eines dieser Probleme, sondern eher ein zufälliges Werkzeug im System, das diese Probleme löst. –
Wenn Sie an Tupel wie Produkttypen denken (wie in: 'Bool' hat zwei Einwohner,' Maybe Bool' hat drei Einwohner, '(Bool, Maybe Bool)' hat sechs Einwohner), dann sind Funktionstypen Exponenten. Da 'e^(x * y) = (e^x)^y ', kann man immer eine Funktion mit dem Typ' (x, y) -> e' in eine ähnliche Funktion mit dem Typ 'y -> (x - > e) '. Das ist auf den Punkt gebracht. Da Sie solche Funktionen immer neu schreiben können (in diesem Fall zu relativ geringen Kosten), müssen Sie Multiparameterfunktionen nicht zu einem grundlegenden Konzept machen, das Ihre Sprachdefinition sonst verkomplizieren würde. –