No subject

From: ()
Date: Sat Mar 24 01:50:51 EDT 2012

a bad idea?

Thanks,
Harry


On Sun, May 27, 2012 at 4:32 AM, Jens Axel Søgaard
<jensaxel at soegaard.net> wrote:
> 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.spier at 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
>> <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
>>>
>
>
>
> --
> --
> Jens Axel Søgaard


Posted on the users mailing list.