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