That's very helpful. Thank you both.
I'd only got to
a route with map and a closure
for plus
let y = 0;map(x->(g() = y += x; g()),1:10);end
Thanks,
John.
On Tuesday, September 9, 2014 4:47:30 PM UTC+1, Shashi Gowda wrote:
>
> or rather,
>
> julia> cumfoldl(f, x0, itr) = foldl((a, b) -> push!(a, f(a[end], b)),
> [x0], itr)
> julia> cumfoldl(*, "0", map(string, 1:10))
> 11-element Array{ASCIIString,1}:
> "0"
> "01"
> "012"
> "0123"
> "01234"
> "012345"
> "0123456"
> "01234567"
> "012345678"
> "0123456789"
> "012345678910"
>
>
> On Tue, Sep 9, 2014 at 9:15 PM, Shashi Gowda <[email protected]
> <javascript:>> wrote:
>
>> In this particular case, cumsum does exactly this,
>>
>> julia> cumsum([1:10])
>> 10-element Array{Int64,1}:
>> 1
>> 3
>> 6
>> 10
>> 15
>> 21
>> 28
>> 36
>> 45
>> 55
>>
>> I guess that would be idiomatic Julia ;)
>>
>> An equivalent foldl would be
>> foldl((a, b) -> push!(a, a[end]+b), Int[1], [2:10])
>> 10-element Array{Int64,1}:
>> 1
>> 3
>> 6
>> 10
>> 15
>> 21
>> 28
>> 36
>> 45
>> 55
>>
>> A generic cumfoldl would be
>>
>> julia> cumfoldl(f, x0, itr) = foldl((a, b) -> push!(a, f(a[end], b)),
>> [itr[1]], itr[2:end])
>> cumfoldl (generic function with 1 method)
>>
>> julia> cumfoldl(*, 0, map(string, 1:10))
>> 10-element Array{ASCIIString,1}:
>> "1"
>> "12"
>> "123"
>> "1234"
>> "12345"
>> "123456"
>> "1234567"
>> "12345678"
>> "123456789"
>> "12345678910"
>>
>>
>> I often find it useful to remind myself that foldl(push!, eltype(list)[],
>> list) constructs the same list and take it from there.
>>
>
>