It suddenly dawned on me, that the append trick is not needed. This works too:
(define (running-average-of-3-alternative l) (for ([x (in-list l)] [y (in-list (cdr l))] [z (in-list (cddr l))]) (displayln (/ (+ x y z) 3)))) But in this version, the list is traversed 3 times. In the fold version it is only traversed once. /Jens Axel 2012/5/27 Harry Spier <vasishtha.sp...@gmail.com>: > Thank you Matthias for the pattern, its exactly what I needed. > And thank you Jens for the trick of appending a dummy element to the > list so you don't lose the last item in the list. > I.e. > (define (f1 lst) > (define-values (result-list dummy1 dummy2) > (for/fold ([result-list '()][prior '()] [current (first lst)]) > [next (rest (append lst '()))] > .... > ... > (values (cons result-item result-list ) > current > next))) (reverse result-list)) > > On Sat, May 26, 2012 at 11:50 AM, Matthias Felleisen > <matth...@ccs.neu.edu> wrote: >> >> Do you mean that if you operated on a list it would look like this: >> >> #lang racket >> >> (define (running-average-of-3 l2) >> (define-values (_1 _2) >> (for/fold ((current (second l2)) (prior (first l2))) ((next (rest (rest >> l2)))) >> (displayln (/ (+ prior current next))) >> (values next current))) >> (void)) >> >> (running-average-of-3 '(1 2 3 4 5 6 7 8 9 0)) >> >> >> >> >> On May 26, 2012, at 12:56 AM, Harry Spier wrote: >> >>> I can use for/fold to loop through a sequence while having the current >>> element and the previous element of the sequence still available by >>> doing something like this. >>> >>> (for/fold ([previous-element-in-sequence '()][list-being-created '()]) >>> ( [current-element-in-sequence sequence]) >>> (do some stuff) >>> .... >>> (values current-element-in-sequence >>> (cons something list-being-created))) >>> >>> But what I want is to be able to loop through a sequence while having >>> the prior, the current and the next element available. >>> >>> I'm sequencing through a representation of lines of a black and white >>> page of text showing where the black pixels are and from that >>> producing a graph showing the connectivity of the black pixel strips >>> on each line to the ones on the lines above and below it. >>> >>> Using for/fold I'm able to code the graph of connectedness of the >>> black strips on each line to the prior line in a very straightforward >>> way, but I'd like to graph in both directions both to the prior line >>> and to the next line at the same time. >>> >>> Is there a simple way to loop through a sequence and have the prior, >>> current and next element available at the same time. >>> >>> Thanks, >>> Harry >>> ____________________ >>> Racket Users list: >>> http://lists.racket-lang.org/users >> -- -- Jens Axel Søgaard ____________________ Racket Users list: http://lists.racket-lang.org/users