2017-05-24 2 views
1

Clojure und Scala haben beide Zusammensetzfunktionen/Methoden (comp und .compose respectively). Scala hat eine Methode .andThen, die die gleiche Art und Weise wie .compose funktioniert, außer es ist die Funktionsanwendung in der umgekehrten Reihenfolge verschachtelt. Existiert in Clojure ein Analogon dieser Funktion? (defn and-then [& fns] (apply comp (reverse fns))), jedoch scheint es, grundlegend genug, dass es muss bereits vorhanden sein, zumal in Clojure es bei der Umwandlung von Threading-Makro Ausdrücke in Punkt freie Funktionen natürliche Anwendung hat:Clojure Äquivalent Scala andthen

ich es leicht genug, um mich zum Beispiel so schreiben könnte z.B die beide folgenden Ausdrücke gleichwertig im einstelligen Fall wären: #(->> % a b c) und (and-then a b c)

Antwort

3

Ich glaube nicht, dass es etwas eingebaut, wahrscheinlich weil clojure keine Infix Syntax hat (das heißt (and-then f g) ist nicht so klar wie f andThen g). Wie Sie bereits erkannt -> und ->> sind, was im Allgemeinen darin Platz verwendet wird.

+0

Ich bin damit einverstanden 'und-then' nicht der beste Name für eine Präfix Sprache ist, aber ich hatte gehofft, Clojure etwas mit einem Namen hatte, die mehr Sinn. Die Threading-Makros sind groß in vielen Situationen, aber es gibt andere Zeiten, in denen eine Funktion (kein Makro), die eine Funktion (nicht der berechnete Wert) zurückgibt, ist von Vorteil. – user12341234

+0

In der Tat. Es sieht so aus, als ob eine Anzahl von Projekten nur ihr eigenes 'rcomp' mit der von Ihnen vorgeschlagenen Definition definiert. –

0

Nein, es gibt keine solche integrierte Funktionalität in Clojure. Das Codebeispiel, das Sie zur Verfügung gestellt haben, ist gut genug, glaube ich.