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

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Sat May 26 11:50:17 EDT 2012

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)))

(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

Posted on the users mailing list.