[Prev][Next][Index][Thread]

Re: How do I turn values() into a list?



On Thu, 2 Dec 1999, Bruce Hoult wrote:
> In article <slrn84bbs3.7hq.neelk@brick.cswv.com>, neelk@alum.mit.edu wrote:
> > ... how do I capture an unknown
> > number of multiple return values into a sequence?  [e.g.]
> > 
> >   listify(values(5,9)) => (5, 9) // a list with two elements
> >   
> >   listify(values(1,2,3)) => (1, 2, 3) // a list with 3 elements
> >   
> >   listify(values()) => #() // a list with no elements
> 
> OK, I think I'm confused about what you want.
> 
> listify is trivial to write:
> 
>    define method listify(#rest args)
>       args;
>    end method;

You mean

  define method listify (#rest args)
    as(<list>, args)
  end;

since IIRC the type of the #rest argument is <sequence>, not necessarly
<list>.

> You can't pass the result of values() to it -- it wants actual arguments.
>
> You can capture the results of values() into a list with:
> 
>    let (#rest x) = values(1,2,3,4);
> 
> If you do this then you don't need listify().

Right, so may be listify should be

  define macro listify
    { listify ( ?vals:expression ) }
   => { let (#rest temp) = ?vals;
        as(<list>, temp) }
  end;

?

Hugh




References: