Hi folks,
Is there any way to make a function that takes primitive parameters?
It seems you can't, but I might be missing something.
I have the following code (a start to playing with mandelbrot sets):
(defn step [x0, y0, xn, yn]
(let [xm (+(-(* xn xn)(* yn yn)) x0)
ym (+(* 2 xn yn) y0)
]
[xm ym]
)
)
(defn try_to_solve [x0, y0, xn, yn, n, max_n]
(let [m (+ n 1)
[xm ym] (step x0 y0 xn yn)
zm (+(* xm xm)(* ym ym))
]
(cond
(> zm 2.0) m
(>= n max_n) [x0, y0, xm, ym, m, max_n]
true (recur x0, y0, xm, ym, m, max_n)
)
)
)
This works fine (it's my first clojure code, so I'm sure there are
things I could do better, but I'm happy with it as a start)
However, I want to do this a lot, so I was trying to coerce the
paramters to primitive doubles.
It seems you can't write:
(defn step [#^double x0, #^double y0, #^double xn, #^double yn]
and from comments I've seen before, I get the impression if I use type
hinting, clojure will use Doubles and boxing, which is a speed
overhead I don't want.
I get the impression I can rewrite "try_to_solve" to use a loop/recur,
and then can use primitives - but I can't see any way to make calls to
"step" use primitives, short of inlining the function...
- Korny
--
Kornelis Sietsma korny at my surname dot 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]
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
-~----------~----~----~----~------~----~------~--~---