Ein Satz, den ich kürzlich bemerkt habe, ist das Konzept des "punktfreien" Stils ...
Zuerst gab es diese und auch diese Frage .
Dann entdeckte ich hier, dass sie erwähnen: "Ein weiteres Thema, das es wert sein könnte, diskutiert zu werden, ist die Abneigung der Autoren gegen punktfreien Stil."
Was ist "punktfreier" Stil? Kann jemand eine kurze Erklärung geben? Hat es etwas mit "automatischem" Currying zu tun?
Um eine Vorstellung von meinem Niveau zu bekommen - ich habe mir selbst Scheme beigebracht und einen einfachen Scheme-Interpreter geschrieben ... Ich verstehe, was "implizites" Currying ist, aber ich kenne kein Haskell oder ML.
functional-programming
coding-style
scheme
pointfree
Paul Hollingsworth
quelle
quelle
Antworten:
Schauen Sie sich einfach den Wikipedia-Artikel an, um Ihre Definition zu erhalten:
Haskell Beispiel:
Konventionell (Sie geben die Argumente explizit an):
Punktfrei (
sum
hat keine expliziten Argumente - es ist nur eine Falte+
mit 0):Oder noch einfacher: Stattdessen
g(x) = f(x)
könnte man einfach schreibeng = f
.Also ja: Es hängt eng mit dem Curry (oder Operationen wie der Funktionszusammensetzung) zusammen.
quelle
sum (x:xs) ...
stattsum sum (x:xs) ...
?Punktfreier Stil bedeutet, dass die Argumente der zu definierenden Funktion nicht explizit erwähnt werden, sondern dass die Funktion durch Funktionszusammensetzung definiert wird.
Wenn Sie zwei Funktionen haben, wie
und wenn Sie diese beiden Funktionen zu einer berechneten kombinieren möchten
x*x+1
, können Sie sie wie folgt "punktvoll" definieren:Die sinnlose Alternative wäre, nicht über das Argument zu sprechen
x
:quelle
Ein JavaScript-Beispiel:
Referenz
quelle
Punktfreier Stil bedeutet, dass der Code seine Argumente nicht explizit erwähnt, obwohl sie vorhanden sind und verwendet werden.
Dies funktioniert in Haskell aufgrund der Funktionsweise von Funktionen.
Zum Beispiel:
Gibt eine Funktion zurück, die ein Argument akzeptiert. Daher gibt es keinen Grund, das Argument explizit einzugeben, es sei denn, Sie möchten dies auch.
quelle
myShow = show
. Es gibt mehr darüber im Haskell-WikiHier ist ein Beispiel in TypeScript ohne andere Bibliothek:
Sie können sehen, dass der punktfreie Stil "fließender" und leichter zu lesen ist.
quelle
this.moreThan(10)
ist keine benannte Funktion, sondern eine Curry-Funktion sowie eine Funktion, die implizit (also punktfrei) atransaction
als Eingabe verwendet.