2014-09-04 11 views
6

In diesem Blog-Eintrag, "CSP and transducers in JavaScript", der Verfasser:Sind Clojure-Wandler begierig?

Zuerst müssen wir erkennen, dass viele Array (oder eine andere Sammlung) Operationen wie map, filter und reverse kann in Form eines reduce definiert werden.

So then we see eine Reihe von Implementierungen dieser in Clojure sind nicht faul, sie sind eifrig:

user> (defn eager-map [f coll] 
     (reduce (fn [acc v] (conj acc (f v))) 
     [] 
     coll)) 
#'user/eager-map 
user> (eager-map inc (range 10)) 
[1 2 3 4 5 6 7 8 9 10] 

Meine Frage ist, werden Clojure Wandler gespannt?

Antwort

14

Wandler sind sehr einfache Funktionen - sie haben keine Vorstellung von Faulheit oder, in der Tat, wie sie überhaupt angewendet sind. Das ist das Schöne an der Idee - mit Wandlern können wir Funktionen wie map und filter von den Dingen trennen, auf denen sie arbeiten.

Also, ja, sie können verwendet werden, um faule Sequenzen sowie Kanäle und Reduktionen zu bauen. Während der Transducer-Funktionsaufruf selbst eifrig ist, ist es Sache des Transducers, es zu benennen. Lazy-Sequenzen können Wandler nur dann träge aufrufen, wenn sie verbraucht werden, während Reducer sie eifrig verwenden, um die Reduktion auszuspucken.

Sie können in the source sehen, wobei sequence verwendet wird, um eine Lazy-Sequenz über eine Sammlung mit einem Transducer aufzubauen.

Verwandte Themen