Right, this feature is documented in http://dev.clojure.org/display/doc/Documentation+for+1.3+Numerics
For me it feels somewhat strange to use "primed" operations to enforce upgrade casting and to write a special faculty function for that. I just discovered that (fact 21) breaks while (fact 21N) does not but (fact 22N) does: user=> (defn fact [n] (if (<= n 1) 1 (* n (fact (- n 1))))) #'user/fact user=> (fact 21) ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Num bers.java:1374) user=> (fact 21N) 51090942171709440000N user=> (fact 22N) ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Num bers.java:1374) Weird! Dominikus On Sep 8, 2:05 pm, "Meikel Brandmeyer (kotarak)" <m...@kotka.de> wrote: > Hi, > > Am Donnerstag, 8. September 2011 13:57:49 UTC+2 schrieb Dominikus: > > > > > Upgrade casting in Clojure 1.2 is cool and simple. > > It's also in 1.3 cool and simple. > > user=> (defn fact [n] (if (<= n 1N) 1N (* n (fact (- n 1N))))) > #'user/fact > user=> (fact 21) > ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow > (Numbers.java:1374) > user=> (defn fact' [n] (if (<= n 1N) 1N (*' n (fact (dec n))))) > #'user/fact' > user=> (fact' 21) > 51090942171709440000N > > Sincerely > Meikel -- 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