Le mercredi 4 mars 2015 22:08:13 UTC+1, Fluid Dynamics a écrit :
>
> For examining adjacent items in a sequence, there are a few functional 
> (i.e., no mutable state) approaches.
>
> When the output is a sequence with an element for each adjacent pair:
>
> (map (fn [a b] ...) s (next s))
>
> When the output is a sequence with an element for each adjacent pair that 
> meets some criterion:
>
> (remove #{::removeme}
>   (map
>     (fn [a b]
>       (if (criterion a b)
>         (foo a b)
>         ::removeme))
>    s (next s)))
>
> OR
>
> (for [[a b] (map vector s (next s))
>       :when (criterion a b)]
>   foo a b) 
>
<snip/>
>

The are interesting examples.

For the use case above, I use the following instead of 'for' to avoid the 
extra baggage that comes with it*:

(mapcat (fn [a b]
               (when (criterion a b) [(foo a b)]))
             s (next s))

But if the goal of the OP is to delete all consecutive duplicates in a 
sequence then neither of these are very helpful. Instead, he could do:

user> (let [s [1 1 2 2 2 1 1 3 3 3 3 4 5]]
            (map first (partition-by identity s)))
;; => (1 2 1 3 4 5)


* For those who wonder what goes under the hood when you use 'for', just 
try this:

user> (macroexpand-1 '(for [[a b] (map vector s (next s))
                                         :when (criterion a b)]
                                     (foo a b)))

But beware that you might never see 'for' the same way after that :)

-- 
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