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]
Thanks in advance,
-Tom
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en