Folgendes funktioniert aus offensichtlichen Gründen nicht.
%Vor% mzero
hat null Argumente und Null-Argument-Methoden sind in Protokollen nicht erlaubt (oder sind nicht sinnvoll). In Haskell oder Scala, wo der Versand typenbasiert und nicht wertbasiert ist, ist dies kein Problem.
Was wäre der richtige Weg, um das Monoid
-Protokoll in Clojure zu konzipieren und zu schreiben?
Blick auf die Quelle , den Weg dass dies in der neuen Reducer-Bibliothek
genauer, monoid
nimmt zwei Argumente - op
und ctor
und gibt eine Funktion zurück, die, wenn sie ohne Argumente aufgerufen wird, ctor
auswertet, und wenn sie mit zwei aufgerufen wird, auf op
.
Dies ist konsistent mit der Behandlung von Null in einer Faltung, zum Beispiel - reduce
(falten) wertet die Funktion aus, die ohne Argumente gefaltet wird, um gegebenenfalls die Null zu finden.
Ich schäme mich ein wenig, etwas so Unspektakuläres zu zeigen, aber ich sehe nicht, wie man in clojure besser sein kann. Danke für die Erklärungen / Bildung in den Kommentaren.
Tags und Links clojure functional-programming monoids