On Jul 27, 11:11 am, Alan Malloy <[email protected]> wrote:
> On Jul 27, 5:50 am, Feng Shen <[email protected]> wrote:
>
> > Clojure core.clj has a macro when-let,
> > I am wondering how to write a macro `when-lets`
>
> > (when-lets [symbol-1 test-1
> > symbol-2 test-2
> > ...
> > ]
> > body
> > )
>
> > body only get evaluated when (and test-1 test-2 ....)
> > I am thinking about it, anybody has any clue?
>
> (defmacro when-lets [tests & body]
> (reduce (fn [body test]
> `(when-let ~(vec test)
> ~body))
> `(do ~@body)
> (partition 2 (reverse tests))))
>
> This would be cleaner if we had foldr in the language already - I find
> myself wanting it quite often for macros like this.
Sorry, should of course be
(defmacro when-lets [tests & body]
(reduce (fn [body test]
`(when-let ~(vec test)
~body))
`(do ~@body)
(reverse (partition 2 tests))))
Apparently the reason I want foldr is because I get it wrong when I do
it myself.
--
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