David and Stu to the rescue. Of course that's the way to do it. Thank you both,
/Linus 2011/12/5 David Nolen <dnolen.li...@gmail.com> > You can't store primitives in vars. But you can cast their contents to > primitives with (long ...) (int ...) etc > > David > > On Mon, Dec 5, 2011 at 12:16 PM, Linus Ericsson < > oscarlinuserics...@gmail.com> wrote: > >> >> >> 2011/12/5 Stuart Sierra <the.stuart.sie...@gmail.com> >> >>> > (side note: what is different between Long/MAX_VALUE and the >>> > function call (Long/MAX_VALUE)? >>> >>> None. Both are syntax sugar for (. Long MAX_VALUE) >>> >>> >>> > It seems like unchecked-multiply doesn't like vars, but thats >>> surprising. >>> > What am I doing wrong here? >>> >>> unchecked-multiply only does unchecked arithmetic when the arguments are >>> primitive. Vars cannot have primitive values, they must be boxed as >>> java.lang.Long. So it reverts to normal Clojure arithmetic. >>> >>> The unchecked-* functions are intended as a performance optimization >>> when doing operations with primitives. >> >> >> OK, then the problem seems to be to refer to primitives with symbols with >> unchecked-* functions. How do I do that? >> >> The loop where high performance is required is >> >> hash = -3750763034362895579 >> for each byte b in array-of-bytes-to-be-hashed do : >> hash = hash * 1099511628211 (without caring about overflowing) >> hash = hash ^ byte >> return hash >> >> and I really cannot see how to do this without using something that hold >> values somehow, but how do I bypass the numeric stack in clojure? >> >> I have tried with the following approach (just for the first step): >> >> fnv> (def hash (Long. -3750763034362895579)) >> #'fnv/hash >> fnv> (def hash2 (Long. (unchecked-multiply hash 1099511628211))) >> ; Evaluation aborted. (because of integer overflow) >> >> How should I do to get it working correctly? There simply must be a way >> to store primitives, but I'm apparently have gotten something wrong here. >> >> (the hash in question is the quite quick FNV-hash, which is in public >> domain, nice and everything) >> >> /Linus >> >> -- >> 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 >> > > -- > 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 > -- 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