[plt-scheme] How do I convert (values ...) to something I can do something with?

From: Todd O'Bryan (toddobryan at gmail.com)
Date: Tue Mar 9 23:38:08 EST 2010

Stylistically, is one better/more idiomatic than the other? I thought
about returning a list, but I have this aversion to complex nested
structures that aren't self-descriptive. (Yeah, I know--if
s-expressions freak me out, I'm looking for trouble coding in Scheme.)
I could define a struct so that the parts have names; maybe that's the
best thing to do.

I guess I decided to return multiple-values because it forces me to
check myself. I can't just assign the return value from the function
to a single variable, so if I screw up and forget that it returns
multiple values, I should get an error fairly early. Within my code,
the multiple-value thing isn't a problem at all. It's just when I was
trying to write test cases that it became annoying.

Does anyone else sometimes feel like you're learning a foreign
language by listening to tapes? I have this constant worry that, while
I think I'm speaking Scheme, when I finally start talking to native
speakers, they're going to find my accent either incomprehensible or
really funny.


On Tue, Mar 9, 2010 at 11:26 PM, Matthias Felleisen
<matthias at ccs.neu.edu> wrote:
> Sure, return a list instead of multiple values. -- Matthias
> On Mar 9, 2010, at 11:14 PM, Todd O'Bryan wrote:
>> Thanks. I saw those, but they didn't register...
>> If (foo 'x) returns multiple values, is there any easier way than
>> (call-with-values (lambda () (foo 'x)) list)
>> to convert it to a list?
>> On Tue, Mar 9, 2010 at 11:05 PM, Carl Eastlund <cce at ccs.neu.edu> wrote:
>>> On Tue, Mar 9, 2010 at 11:02 PM, Todd O'Bryan <toddobryan at gmail.com> wrote:
>>>> I've written a function that returns multiple values. But now I can't
>>>> figure out how to check the silly thing.
>>>> Sorry if this is a stupid question, but how do I convert a (values
>>>> ...) expression into something I can wrap my parentheses around?
>>>> Todd
>>> If you know exactly how many values you'll be getting, use let-values
>>> or define-values.  If you don't, use call-with-values.  They're all in
>>> the Help Desk.
>>> --Carl
>> _________________________________________________
>>  For list-related administrative tasks:
>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme

Posted on the users mailing list.