Sorry guys, I forget to mention that it should behave like "let" in Clojure
or like "let*" in Scheme.
I mean e.g.:
(if-let* [x 1 y nil z (inc y)]
(+ x y z)
0) ; => 0
;; (inc y) shouldn't be evaluated here.
Which means "and" doesn't work there.
In terms of implementation I mean smth like that:
(defmacro if-let*
([bindings then]
`(if-let* ~bindings ~then nil))
([bindings then else]
(if (seq bindings)
`(if-let [~(first bindings) ~(second bindings)]
(if-let* ~(drop 2 bindings) ~then ~else)
~else)
then)))
But anyway I'm more interested in history of that behavior rather than
implementation.
Because for me it seems logical if "let" support more than two forms
"if-let" also could do that.
And I'd like to understand: "Am I wrong or it's just historical reason?"
Ed
On Friday, January 4, 2013 1:29:41 PM UTC+6, Andy Fingerhut wrote:
>
> I don't know the history of the answer to "why", except perhaps as hinted
> by Evan's answer, which is that it becomes implicit how to combine the
> results of the multiple values to get the final true/false for the if
> condition. You imply "and", which is a perfectly reasonable choice.
>
> My main reason for responding is to let you know that if you really want
> such behavior, macros let you roll your own without much trouble.
>
> Andy
>
> On Jan 3, 2013, at 10:24 PM, Edward Tsech wrote:
>
> Hey guys,
>
> if-let and when-let macros support only 2 forms in binding vector:
>
> (if-let [x 1 y 2]
> ...)
> java.lang.IllegalArgumentExcepdtion: if-let requires exactly 2 forms in
> binding vector(NO_SOURCE_FILE:1)
>
> Why doesn't "if-let" support any even amount of binding forms as "let"
> does?
>
> e.g.
> (if-let [x 1 y 2 z 3]
> (+ x y z)
> 0) ; => 6
>
> (if-let [x 1 y nil z 3]
> (+ x y z)
> 0) ; => 0
>
> Thanks!
>
>
>
--
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