Shouxun Yang <yang.shou...@gmail.com> writes:

> (defn my-flatten
>   [coll]
>   (loop [acc [] coll coll]
>     (if-let [[a & coll] coll]
>       (if (or (list? a) (vector? a))
>           (recur acc (if (empty? coll)
>                        (vec a)
>                        (conj (vec a) coll)))
>           (recur (conj acc a) coll))
>       acc)))
>
> The above code failed the second test: ["a" ["b"] "c"].
>
> Instead of producing the correct result, it produces: ["a" "b" ("c")].

The problem is that in ["a" "b" ("c")], ("c") is neither a list nor a
vector.  It's a seq.  Unfortunately, seqs and lists have the same print
syntax, so you were not able to easily see that.

BTW: You should use coll? instead of sequential? or seq? if your
intention is only to check if the thing is some collection.  For
example, (sequential? #{1 2 3}) is false.  (sequential? only works for
ordered collections like vectors, lists and seqs.)

BTW2: Instead of (empty? coll), use the idiomatic (seq coll) recipe.

Bye,
Tassilo

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