user> (def a ["a" "a" "a" "b" "c" "c" "a"])
#'user/a
user> (pack a)
(("a" "a" "a") ("b") ("c" "c") ("a"))

Now calling (map f (pack a)) will cause the function you give as the first argument of map to be called with each of the elements of the collection (pack a) in turn. Those elements are, in order:

("a" "a" "a")   a list of 3 elements
("b")  a list of 1 element  (note: it is not the same as "b" by itself)
("c" "c")  a list of 2 elements
("a")   a list of 1 element

Then each of the return values of those function calls will be put into a list (or more precisely, a lazily generated list).

With your failing version of encodemodifed, when it is called with the list ("b"), (count %) is equal to 1, so it returns its argument, which is the list ("b").

Andy

On Oct 2, 2010, at 9:26 AM, swheeler wrote:

(defn pack
[col]
  (partition-by identity
col))

(defn encodemodified
[col]
  (map #(if (== (count %) 1) % (list (count %) (first
%)))
     (pack col)))

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

Reply via email to