[r6rs-discuss] Thing1: Dealing with VALUES
kumoyuki at gmail.com
Thu Dec 3 01:52:48 EST 2009
2009/12/2 John Cowan <cowan at ccil.org>:
> David Rush scripsit:
> 1) (lambda foo . body) isn't quite what you say, because foo is
> a first-class list, not an opaque cookie that only a destructuring
> operation can access.
I am re-thinking the underlying meaning. Auric values are no more an
opaque cookie than a cons-cell is in RnRS Scheme. In fact, they are an
exact equivalent to RnRS vectors. The vector equivalence is so
uninteresting, that I only spent about a sentence on it.
> 2) Under CPS, multiple returns are just multiple arguments passed to
> the continuation, but while there is syntactic sugar for specifying a
> fixed number, or minimum number, of arguments, there is no such sugar for
> specifying a fixed number of results. This matters because if something
> is sugared the compiler can optimize it freely.
This is precisely my point.
> 3) There are a couple of possibilities for adding such syntactic sugar:
> I suggested (LAMBDA n (arg ...) . body),
That seems un-schemely. I developed the concepts of Auric in an
entirely different Lisp where I made LAMBDA a macro for a slightly
different (and more restrictive) fundamental abstraction construct.
Developing syntactic sugar to make it friendly to Schemers was not
hard. Showing Scheme compatibility was the point of the whole
meta-circular interpreter. I feel that I implemented enough to show
that the surface language of Scheme need not change at all to
incorporate this approach to continuation arguments.
 I vaguely recall someone saying that Common Lisp uses APPLY/LIST
for CALL-WITH-VALUES/VALUES and takes the car of the returned object
if the continuation only accepts a single value
 In fact, I have another small extension to DESTRUCTURE which
harmonizes the dynamic type checking of program values with the
type-checking of procedure arity. Given the demands of my day-job &
busy life, I may have it ready for release in a week or so.
More information about the r6rs-discuss