Ajay,
> It tried the following in REPL and got no error. Personally, I feel that
> I should get an error because calling square on strings is wrong in both
> cases.
>
> Is there a way out of this in Clojure?
>
> |(defn square[n] (* n n))
>
> (if (= 0 0) (println"hello") (map square["a" "b"]))
>
What did you expect from Clojure? In the above form the `map` is a part
of the else form and that's why it's not executed.
If you don't know already, the syntax for `if` in Clojure is like this -
(if expression
(then form)
(else form))
If you have multiple then or else forms, you can wrap them inside a `do`
form like this -
(if expression
(do
(then form)
(more then form))
(else form))
> The following gives error (because it gets evaluated):
>
> |(defn square[n] (* n n))
>
> (if (= 0 1) (println"hello") (map square["a" "b"]))
In the above form, the map is a part of the else form and since 1 is not
equal to 0, the `map` is executed.
I hope your confusion is cleared.
PS - If you are worried about "compile time type checking", I think it's
prudent to mention now that Clojure is a dynamically typed programming
language where types are checked at run-time and not compile time.
Regards,
BG
--
Baishampayan Ghose <[email protected]>
oCricket.com
--
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