If you like assert args, you should check out pre & post conditions
for your functions.  They're built in to Clojure since 1.1

The official docs:
http://clojure.org/special_forms#Special%20Forms--%28fn%20name?%20%28[params*%20]%20condition-map?%20exprs*%29+%29

Video Tutorial:
http://vimeo.com/8399758

On Nov 29, 10:35 pm, Alex Baranosky <alexander.barano...@gmail.com>
wrote:
> I had some fun with this and added assert-args:
>
> (defmacro assert-args [fnname pred msg & pred-msg-pairs]
>   `(when-not ~pred
>     (throw (IllegalArgumentException. ~(str fnname " requires " msg))))
>   (when (seq pred-msg-pairs)
>     (list* `assert-args fnname pred-msg-pairs)))
>
> (def ascending compare)
> (def descending #(compare %2 %1))
>
> (defn compare-by [& key-cmp-pairs]
>   (assert-args compare-by
>     (even? (count key-cmp-pairs)) "even number of args (keyword,
> comparator)"
>     (every? #(or (keyword? %) (fn? %)) key-cmp-pairs) "all args to be
> keywords or functions")
>   (fn [x y]
>     (loop [[k cmp & more] key-cmp-pairs]
>       (let [result (cmp (k x) (k y))]
>         (if (and (zero? result) more)
>           (recur more)
>           result)))))

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