[racket] Calculating cumulative sum of the list

From: Jack Firth (jackhfirth at gmail.com)
Date: Thu Jan 22 16:30:16 EST 2015

Scratch that, naive memoization doesn't fix it. Will tinker with this more
out of curiosity

On Thu, Jan 22, 2015 at 1:23 PM, Jack Firth <jackhfirth at gmail.com> wrote:

> Add memoization to fix that
>
> (define (memo f)
>   (let ([cache (make-hash)])
>     (lambda xs
>       (hash-ref! cache xs (thunk (apply f xs))))))
>
> (define (cumulative-sum xs)
>   (map (memo (curry foldl + 0))
>            (build-list (length xs)
>                            (compose (curry take xs)
>                                             add1))))
>
> On Thu, Jan 22, 2015 at 11:21 AM, Matthias Felleisen <matthias at ccs.neu.edu
> > wrote:
>
>>
>> Consider the performance implications.
>>
>>
>> On Jan 22, 2015, at 1:59 PM, Jack Firth <jackhfirth at gmail.com> wrote:
>>
>> > If you're using all of racket, here's a way to do it with heavy usage
>> of higher order functions
>> >
>> > #lang racket
>> >
>> > (define (cumulative-sum xs)
>> >   (map (curry foldl + 0)
>> >            (build-list (length xs)
>> >                            (compose (curry take xs)
>> >                                             add1))))
>> >
>> > On Thu, Jan 22, 2015 at 6:34 AM, Matthias Felleisen <
>> matthias at ccs.neu.edu> wrote:
>> >
>> > #lang racket
>> >
>> > ;; [Listof Number] -> [Listof Number]
>> > ;; given (a b c ...) produce (a (+ a b) (+ a b c) ...)
>> > (define (cumulative-sum l #;"final private:" [so-far 0])
>> >   (cond
>> >     [(empty? l) '()]
>> >     [else (define next (+ so-far (first l)))
>> >           (cons next (cumulative-sum (rest l) next))]))
>> >
>> > (module+ main
>> >   (cumulative-sum '(1 2 3)))
>> >
>> > ;; The comments are HtDP-style, but the optional entry parameter is not
>> available in the teaching languages.
>> >
>> >
>> > On Jan 22, 2015, at 8:53 AM, Alexandr M <rus314 at gmail.com> wrote:
>> >
>> > > Hello,
>> > >
>> > > I am trying to replicate functionality of this code in Python:
>> > >
>> > > https://gist.github.com/m-blog/22b7c5d31b3839ffba50#file-cumsum-py
>> > >
>> > > in Racket without usage of any libraries.
>> > >
>> > > What would the most optimal / concise way to do it in Racket?
>> > >
>> > > Thank you.
>> > >
>> > > --
>> > > Best regards,
>> > > Alex
>> > > ____________________
>> > >  Racket Users list:
>> > >  http://lists.racket-lang.org/users
>> >
>> >
>> > ____________________
>> >   Racket Users list:
>> >   http://lists.racket-lang.org/users
>> >
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20150122/e63bc542/attachment.html>

Posted on the users mailing list.