On Thu, Dec 15, 2011 at 5:53 PM, Cedric Greevey <cgree...@gmail.com> wrote:
> (defn dist > "Shortest distance between x,y and x2,y2 in toroidal space of dimensions > w,h. > Input coordinates should be in range (0,0)-(w,h). For instance, will give > 1.414... if x,y = (0,0) and x2,y2 = (w-1,h-1), as these are diagonally > adjacent." > ([x y x2 y2 w h] > (let [x2s [(- x2 w) x2 (+ x2 w)] > y2s [(- y2 h) y2 (+ y2 h)] > dist-sqrs (for [x2 x2s y2 y2s] > (let [dx (- x2 x) > dy (- y2 y)] > (+ (* dx dx) (* dy dy))))] > (Math/sqrt (double (apply min dist-sqrs)))))) > #'user/dist > > (defn dist2 > "Shortest distance between x,y and x2,y2 in toroidal space of dimensions > w,h. > Input coordinates should be in range (0,0)-(w,h). For instance, will give > 1.414... if x,y = (0,0) and x2,y2 = (w-1,h-1), as these are diagonally > adjacent." > (^double [x y x2 y2 w h] ; Sole difference is the ^double added here. > (let [x2s [(- x2 w) x2 (+ x2 w)] > y2s [(- y2 h) y2 (+ y2 h)] > dist-sqrs (for [x2 x2s y2 y2s] > (let [dx (- x2 x) > dy (- y2 y)] > (+ (* dx dx) (* dy dy))))] > (Math/sqrt (double (apply min dist-sqrs)))))) > #<CompilerException java.lang.IllegalArgumentException: fns taking > primitives support only 4 or fewer args, > > But the function isn't *taking* primitives. It's only *returning* a > primitive, after taking Objects. So it obviously shouldn't produce > this error. Not a bug, but the error should be clearer. David -- 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