On Mon, Jan 9, 2012 at 12:53 PM, Tom Chappell <tomchapp...@gmail.com> wrote:
> Ok, I've got a couple thousand lines of Clojure under my belt, but
> this has me stumped, unless it's a compiler etc. issue.  If I'm
> missing something dumb, what is it, please?
>
> I have a function that is failing a not-nil precondition.  Here are
> four versions of the same test; only #3 works correctly.  Obviously I
> can work around the problem, but am I doing something wrong?
>
> user> (def fq (frequencies "abbccc"))
> #'user/fq
>
> user> fq
> {\a 1, \b 2, \c 3}
>
> user> (fq \a)
> 1
>
> user> ; incorrectly fails :pre
> (defn test-fun1
>  [mp k]
>  {:pre (not (nil? (mp k)))}
>  (mp k))
> #'user/test-fun1
>
> user> (test-fun1 fq \a)
>
> Assert failed: (nil? (mp k))
>  [Thrown class java.lang.AssertionError]
>
> user> ; incorrectly fails :pre
> (defn test-fun2
>  [mp k]
>  {:pre (not= nil (mp k))}
>  (mp k))
> #'user/test-fun2
>
> user> (test-fun2 fq \a)
>
> Assert failed: nil
>  [Thrown class java.lang.AssertionError]
>
> user> ; correctly survives :pre
> (defn test-fun3
>  [mp k]
>  {:pre (not= 0 (mp k 0))}
>  (mp k))
>
> #'user/test-fun3
> user> (test-fun3 fq \a)
> 1
>
> user> ; incorrectly fails :pre
> (defn test-fun4
>  [mp k]
>  {:pre (not= nil (mp k nil))}
>  (mp k))
> #'user/test-fun4
>
> user> (test-fun4 fq \a)
>
> Assert failed: nil
>  [Thrown class java.lang.AssertionError]

user> (test-fun3 {} :foo)
nil

Looks to me like it is treating the second item of the seq following
:pre as the entire test.

I'd check the precondition documentation (wherever that is) as it
looks like the syntax isn't just {:pre test-expr} but rather {:pre
(something test-expr maybe-something-else)}.

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