Re: [Scheme-reports] Formal definitions [con'd]
Jean-Michel HUFFLEN 03 Dec 2012 21:40 UTC
Alex Shinn <alexshinn@gmail.com> wrote:
> On Fri, Nov 30, 2012 at 8:29 AM, Jean-Michel HUFFLEN
> <jmhuffle@femto-st.fr>wrote:
> (...)
>> - p. 70, "define-values"; the 1st clause
>>
>> ((define-values () expr) ...)
>>
>> seems to me to be useless, "define-values" cannot be used with an
>> empty list of variables, and no recursive call yields this situation;
>>
>
> It's unlikely you would intentionally do this, but it is allowed
> by the specification - define-values can take any formals list,
> including an empty list.
OK, but I have two questions. In such a case:
(define-values () expr)
we could consider that "expr" is produced, but not consummated by any
variable. In other words, an expansion could be:
(call-with-values (lambda () expr)
(lambda args (if #f #f)))
Second question: if the expansion is:
(define dummy
(call-with-values (lambda () expr)
(lambda args #f)))
let us consider the two following expressions:
(let ()
(define dummy '*something*)
(define-values () '*another-thing*)
dummy)
(let ()
(define-values () '*something*)
(define dummy another-thing*)
dummy)
and let us recall that in such a case, all the variables introduced by
means of "local" "define" must be pairwise-different. In the first
case, that works because Scheme macros are hygienic and the variable
"dummy" introduced by "define-values"' expansion is renamed. But what
about the second? When the "define-values" macro is expanded, "dummy"
is not known within the environment, is it? Or am I missing something?
Cheers,
J.-M.
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
_______________________________________________
Scheme-reports mailing list
Scheme-reports@scheme-reports.org
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports