On Mon, Aug 23, 2010 at 12:26 AM, Will M. Farr <wmf...@gmail.com> wrote:
> Thanks for sharing your code, and for the comments.  Let me see if I 
> understand this correctly: the following code should produce a total, a 
> vector whose elements are the partial sums of elements at lower indices than 
> the corresponding element of the input vector, and a vector whose elements 
> are partial sums of elements at the index and lower indices of the input 
> vector, right?

Yes, that's correct.

> 1. In my forms, the length is optional, and distinguished (when provided) 
> from the for-clauses by a keyword argument.  In yours, it must be provided as 
> the first for-clause (thus requiring that the index be named).

Yes. Note that my for/vector form will iterate over the indices even
if no other sequence is provided. Thus you can write stuff like this
(taken from some code of mine):

  (for/vector ([i n]) (create-row (+ i l)))

You can ignore the name if you want:

  (for/vector ([_ n-pts]) ...)

> 2. In my forms, the final body expression must produce exactly one value, 
> which becomes the vector element.  In yours, the final body expression must 
> produce exactly as many values as the third argument to the length clause (if 
> provided) or 1 (if no third argument is present).

Yes.

> As for difference 1, I think it's nice to be able to avoid providing a length 
> if I don't want to.  Sometimes I may not really care about the efficiency of 
> the loop, but will later need a vector, in which case it's a lot less effort 
> to use (for/vector ((i (in-range 3))) ...) than to have to provide a length.  
> I also prefer the "distinguished" #:length keyword instead of shoehorning the 
> length argument into a not-really-for-clause.  I'm curious what others think, 
> however.

I like having the index bound to a name if I want it. Otherwise I'm
fine with specifying it in an alternate way.

> Difference #2 seems more significant to me.  I really like the idea of being 
> able to produce multiple vectors simultaneously---as you say, it can have 
> efficiency benefits and also be really convenient.  However, note that the 
> for/list form does not allow multiple values from the last body expression, 
> so there is an argument from consistency to prohibit it in for/vector as well.

We don't have to repeat the mistakes of the past :)

> I'd be open to adding another keyword argument, however, to designate some 
>number of vectors (independently of the presence or absence of the #:length 
>keyword) for the output.  I'll put that in the next version, and we can see 
>what other people think.  As with the #:length argument, I would prefer this 
>to be a separate keyword---maybe #:num-vecs, maybe something else---rather 
>than trying to fit it into a special for-clause.

Alternatively, it could be a for/vectors / for/fold/vectors form. I'm neutral.

N.
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Reply via email to