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

From: Harry Spier (vasishtha.spier at gmail.com)
Date: Sat May 26 19:28:05 EDT 2012

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


Posted on the users mailing list.