looks like a variation of partition-by

On 09/14/2016 07:16 PM, Marshall handheld Flax wrote:
> This looks like a standard thing you might want to do with a transducer:
> accept a stream of inputs and statefully group them into a stream of
> varying-length vectors.  A typical example might be to accept a series
> of bowling throws and emit them grouped into bowling frames.  So you
> have a generic "vectorTransducer" which is defined by the rule as to
> when one frame is full and the next begins.  Does such a thing have a
> standard name?
> 
> Thanks!
> 
> Marshall
> 
> (defn vectorTransducer [timeForNextVector]
>   (fn [rf]
>     (let [pending (volatile! [])]
>       (fn
>         ([] (rf))
>         ([result] (if (not-empty @pending)
>                     (rf result @pending)
>                     (rf result)))
>         ([result input]
>          (let [appended (conj @pending input)]
>            (if (timeForNextVector appended)
>              (do (vreset! pending [])
>                  (rf result appended))
>              (do (vreset! pending appended)
>                  result))))))))
> 
> (defn bowlingTransducer[]
>   (vectorTransducer
>    (fn ([v]
>         (or (<= 2 (count v))
>             (<= 10 (reduce + v)))))))
> 
> (into [] (bowlingTransducer)
>       (concat (range 11) (range 11)))
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to clojure+unsubscr...@googlegroups.com
> <mailto:clojure+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout.


-- 
And what is good, Phaedrus,
And what is not good—
Need we ask anyone to tell us these things?

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to