In der Funktion höherer Ordnung falten / reduzieren Sie den Namen des Funktionsarguments, falls vorhanden?
Ich arbeite an einer monadischen tabellarischen Verarbeitungsbibliothek, in der Zeilen gefaltet werden, um einfache Analysen zu erstellen (z. B. das Ermitteln des Minimums, Maximums und Durchschnitts einer Spalte). Ich suche daher nach einem soliden Namen für das Argument der fold
Funktion, und jeder Name, der in der ML-Community gut etabliert ist (oder Haskell oder Common Lisp als zweiter und dritter Kandidat), wäre interessant.
Ein Name wie f
ist in der Beschreibung von fold
Funktionen üblich, jedoch nicht beschreibend und ein Substantiv wäre besser geeignet.
terminology
functional-programming
naming
user40989
quelle
quelle
fold
ist eine Funktion höherer Ordnung. Das Argument zu folden ist nur das, ein ArgumentAntworten:
Ich weiß nicht, ob es eine einzige Antwort darauf gibt, wie @jozefg erwähnte. Und so rein aus Spekulation, hier ist eine mögliche Erklärung:
Ich vermute, der Grund dafür ist, dass der Typ - zum Beispiel
(a -> b -> b)
bei Haskellfoldr
- aussagekräftiger ist als jeder Name, den man sich vorstellen könnte. Da die Parametera
undb
type alles sein können , kann die Funktion auch so ziemlich alles tun. So können Sie mit Namen sind links wiefunction
,combiner
,morphism
, undargument
, die nicht besonders sinnvoll entweder. Könnte auch einen kurzen, nicht ablenkenden Namen verwenden.Ein weiteres Beispiel ist die
id :: a -> a
Funktion: Wie sollten Sie ihr Argument nennen? Auch hier denke ich, dassid
der Typ aussagekräftiger ist als sein Argumentname.Ich stimme Ihnen jedoch zu - es scheint, dass es einen gemeinsamen Namen geben sollte, vielleicht in der Mathematik. Ich hoffe, jemand kann mich diesbezüglich korrigieren.
Einige Beispiele für seinen Namen in echtem Code:
In Haskells Bibliotheken heißt es meistens
f
(und manchmaloperator
in den Kommentaren):Es heißt auch
f
in Clojure :quelle
Ich bin nicht einverstanden mit der Idee, dass
f
das Funktionsargument von ein schlechter Name istfold
. Der Grund, warum wir beschreibende Namen in der Programmierung wünschen, ist, dass wir wissen, was der Name beschreibt, und der Namef
wird üblicherweise in der Mathematik (und in funktionalen Programmiersprachen) für eine Funktion (wieg
undh
) verwendet.Wir wissen fast nichts darüber
f
(von Natur aus, da wir, wenn wir genauer darauf eingehen könnten, nichtfold
so viele Dinge verwenden könnten ), und der Namef
sagt uns alles, was wir wissen müssen, außer dass es eine Funktion von zwei Argumenten ist. Der Namef
ist dem Pronomen 'it' im Englischen sehr ähnlich - es ist ein Platzhalter, der fast alles bedeuten kann. Wir wissen nicht, was 'es' ist, bis wir es in einem Satz verwenden, und wir wissen nicht, wasf
ist, bis wir anrufenfold
.Wenn wir Dinge benennen, wollen wir so viele Informationen wie möglich aus dem Namen herausholen, und wir bevorzugen, dass der Name kurz ist (wenn wir das bekommen können, ohne wichtige Informationen zu opfern). Hier haben wir einen sehr kurzen Namen, der uns fast alles sagt, was wir darüber wissen. Ich denke nicht, dass es verbessert werden kann.
Wird in der imperativen Programmierung
i
als Schleifenzähler verwendet (wiej
undk
, wenn wir mehr benötigen); wird in der funktionalen Programmierungf
für ein Funktionsargument in Funktionen höherer Ordnung verwendet (wieg
undh
, wenn wir mehr benötigen). Ich habe nicht genug Erfahrung mit funktionalen Sprachen, um sicherzugehen, dass die f / g / h-Konvention genauso gut etabliert ist wie die i / j / k-Konvention, aber wenn nicht, denke ich, sollte es so sein (es ist definitiv so) in der Mathematik etabliert).quelle
Der gebräuchlichste Name dafür, den ich außer dem Pronomen gehört habe
f
, istbinary operation
oderbinary function
- das Problem, spezifischer zu sein, ist, dass er buchstäblich alles kann , und deshalb halten sich die Leute an die Typensignatura -> b -> a
(odera -> b -> b
wenn es richtig ist) .Also schlage ich vor, dass Sie genau das tun, sich an die Typensignatur halten, zum Glück hat diese bestimmte Typensignatur einen Namen:
binary function
Genau wiea -> a
aunary operation
unda -> b
aunary function
können Siea -> a -> a
abinary operation
unda -> b -> c
a nennenbinary function
.quelle
binary operation
würde mehr bedeutena -> a -> a
undbinary function
würde stehen füra -> b -> c
... die Wahrheit liegt sicherlich dazwischen. :-)Die von Ihnen angeforderte Funktion wird manchmal als "Kombinationsfunktion" bezeichnet (siehe z. B. die HaskellWiki-Seite zum Falten ), dies ist jedoch nicht häufig genug, um sie als Standardterminologie zu bezeichnen.
quelle