IMO this is fairly absurd for a language default, but you can easily
do this yourself in a number of ways. For example:
(defmacro define-preds [& preds]
(cons `do
(for [pred preds]
`(defmacro ~(symbol (str pred "+")) ~'[obj then else]
(list '~'if (list '~pred ~'obj)
~'then ~'else)))))
(define-preds map? string?)
(map?+ {} 1 2) ;; 1
This would be quite a lot easier if we didn't care about the short-
circuiting behavior of 'if, since then a simple higher-order function
would do it, something like (defn as-switch [pred] (fn [obj then else]
(if (pred obj) then else))).
On Apr 17, 9:16 pm, Dmitri <[email protected]> wrote:
> Often times I find myself writing code like the following
>
> (if (map? foo) bar baz)
>
> would it make sense to make test functions variadic, so if only passed
> a single argument it would return true/false, but could also act as an
> if when passed 3 arguments, eg:
>
> (map? foo bar baz) would return bar if foo is a map and baz otherwise.
--
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