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