ntalbs
ntalbs

Reputation: 29458

How to make a cumulative sequence?

Say I have a lazy sequence like the following:

(def s (iterate inc 1))
(take 10 s)
=> (1 2 3 4 5 6 7 8 9 10)

Now, I want to generate a sequence of cumulative sum of s like the following:

=> (1 3 6 10 15 ...)

How can I do this? What I tried is to use atom and accumulate the sum to it(mutating) Is this the only way to generate cumulative sequence or is there a better way to do this?

NOTE: the above cumulative sum is only an example. The source sequence can be other sequence. So I can't use formula: s(n) = n(n+1)/2

Upvotes: 22

Views: 3104

Answers (1)

A. Webb
A. Webb

Reputation: 26446

(take 10 (reductions + s))
=> (1 3 6 10 15 21 28 36 45 55)

Upvotes: 35

Related Questions