[racket] Multiple return values
On Wed, 14 Dec 2011, Zayr Okale wrote:
> Hello, everyone.
>
> Can someone please explain to me multiple return values? Not what it does,
> I understand that much, but what is this feature for? In what situations is
> it useful?
I am not sure how much usable values/call-with-values are in Scheme. In
Common Lisp, some functions return multiple values, for example floor:
[1]> (floor 13 4)
3 ;
1
In this case, one computation is performed to have two values, and user is
free to use only one of them or both. She can also signal her intentions
about ignoring some of the returned values with (declare (ignore ...)),
which, I guess, should be used by compiler/interpreter to optimize things
better.
This "ignore" is very handy, like below:
[3]> (decode-universal-time (get-universal-time))
43 ;
9 ;
18 ;
14 ;
12 ;
2011 ;
2 ;
NIL ;
-1
Also, comparing to C, this would be done by passing pointer to C struct to
the function, which would then fill it with days and month etc. So, I
think multiple values could be used instead of passing/returning
structures. From optimization point, it would be tricky to declare things
like "I pass this structure here to you, but I only need a month number".
And it would be tricky (and trashy) to have multitude of smaller
functions, each for computing year, month, hour from number of seconds.
Last but not least, this may serve as a way to help using information in
place where it is needed:
[4]> (read-line )
aa aa
"aa aa" ;
NIL
Here, read-line returns bot a line of text and a value signaling if there
was EOF condition. Again, one can ignore EOF-value if this is what one
really wants.
Regards,
Tomasz Rola
--
** A C programmer asked whether computer had Buddha's nature. **
** As the answer, master did "rm -rif" on the programmer's home **
** directory. And then the C programmer became enlightened... **
** **
** Tomasz Rola mailto:tomasz_rola at bigfoot.com **