[racket] Looping with look-behind and look-forward

From: Jens Axel Søgaard (jensaxel at soegaard.net)
Date: Sat May 26 16:34:36 EDT 2012

Here is an alternative (not as efficient as MF's version).
It uses that parallel for-loops stop when one of the
sequences are empty.

#lang racket
(define (running-average-of-3-alternative l)
  (for ([x (in-list (append l '(dummy)))]
        [y (in-list (cdr l))]
        [z (in-list (cddr l))])
    (displayln (/ (+ x y z) 3))))

(running-average-of-3-alternative '(1 2 3 4 5 6 7 8 9 0))
(newline)

(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) 3))
     (values next current)))
 (void))

(running-average-of-3 '(1 2 3 4 5 6 7 8 9 0))

2012/5/26 Ashok Bakthavathsalam <ashokb at kggroup.com>:
> The line (displayln (/ (+ prior current next))) needs to be changed to
>  (displayln (/ (+ prior current next) 3))
>
> Thanks,
>
>
> On Sat, May 26, 2012 at 9:20 PM, Matthias Felleisen <matthias at 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
>>
>>
>> ____________________
>>  Racket Users list:
>>  http://lists.racket-lang.org/users
>
>
>
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users
>



-- 
--
Jens Axel Søgaard


Posted on the users mailing list.