Here's one way.
(defn tails [coll]
(take-while seq (iterate rest coll)))
(defn calc [total-values daily-values]
(map * daily-values (for [tail (tails total-values)]
(reduce #(* %1 (inc (/ %2 100.0)))
1.0
(rest tail)))))
In translating it, I first tried to visualize the algorithm[1]. Then I
transcribed that visualization into the usual suspects: map/for,
reduce, filter. Having a solid grasp of each of those -- not to
mention the rest of clojure.core -- is very helpful.
[1] http://i.imgur.com/XDZhm.png (crude drawing of the first step)
Hope that helps,
Justin
On Jun 28, 8:20 pm, "Bhinderwala, Shoeb"
<[email protected]> wrote:
> Hi
>
> I have been learning clojure for some time but am a bit stumped when
> translating code with nested for loops.
>
> Can someone help me to translate the following java code to clojure
> elegantly:
>
> The inputs are two arrays of type double of the same length -
> dailyValues and totalValues. The output is the array contrib of the same
> length.
>
> int n = dailyValues.length;
>
> for (int i = 0; i < n; i++)
> {
> sum = 1.0;
> for (int j = i + 1; j < n; j++)
> {
> sum *= (1.0 + (totalValues[j] / 100.0));
> }
>
> contrib[i] = sum * dailyValues[i];
> }
>
> Many thanks for your help.
>
> -- Shoeb
--
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