[racket] Looping with look-behind and look-forward
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