Hi,

The problem here is that filter is expecting a predicate and you are
passing a set.

When used as a function like so

   user=> (#{1 2 3} 2)
   2

   user=> (#{1 2 3} 5)
   nil

the set returns the argument if it is in the set and nil otherwise.

The problem you are observing is because the item being returned is
false. That is,

   user=> (#{true false} false)
   false

and the conditional test in the definition of filter is, naturally,
failing for this value.

I actually think the behaviour in the first case is wrong since the
documentation for filter is

   Returns a lazy sequence of the items in coll for which
  (pred item) returns true. pred must be free of side-effects.

Note it says "returns true" not "not nil nor false".

The  problem here is that the "if" special form used to define filter
does the following:

   user=> (if 1 "yes" "no")
   "yes"

As it currently stands, either "filter" needs to be redefined using
(if (true? (p (first s) ...) or the documentation needs to be changed.

Regards,

Mark.

On Aug 19, 9:37 am, Sean Devlin <francoisdev...@gmail.com> wrote:
> Hello Clojurians,
> I commonly use a set in my filtering operations, like the example
> below.
>
> user=> (filter #{\a \e \i \o \u} "The quick brown fox jumped over the
> lazy dog")
> (\e \u \i \o \o \u \e \o \e \e \a \o)
>
> Today I found myself using the following code
>
> user=> (filter #{false} [true false false true])
> ()
>
> Obviously, this is not what I intended.  The best I could do was the
> following
>
> user=> (filter (comp not nil? #{false}) [true false false true])
> (false false)
>
> Does anyone else have any other ideas?
>
> Sean
--~--~---------~--~----~------------~-------~--~----~
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