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

Re: lexical list



    From: Pavel_Curtis.PARC@xerox.com
    To: dfried@iuvax.cs.indiana.edu
    Cc: rrrs-authors@mc.lcs.mit.edu
    Message-Id: <900319-144349-1501@Xerox>


	From: Dan Friedman <dfried@iuvax.cs.indiana.edu>
	Subject: lexical list
	Date: Mon, 19 Mar 90 16:42:45 -0500

	if `(,+) expands to (list +), does
	(let ((list (lambda args (write "hello"))))
	  `(,+))
	also write "hello"?
	Is this a bug or a feature?
	.. Dan

    Since `(,+) is, more-or-less, required to read as (quasiquote ((unquote
    +))), the real question is whether or not the expansion of the
    QUASIQUOTE macro should leave LIST free in its expansion.  I believe
    that it should not and, further, that the various proposals being
    discussed by the macros subcommittee would handle this just fine,
    allowing the expansion to use LIST without getting that reference
    captured.

According to my understanding of r4rs and the ieee standard,
quasiquotations are syntax for constructing list and vectors. They are
not macros and the expansion of '(,+) into (list +) is really only
conceptual. Therefore, an implementation which treats quasiquote as a
macro must be hygenic.

    A more interesting question, to my mind, is the value of the following
    expression:

	    (let ((quote car))
	      '(a b))

    I believe that the value of this expression should be the list (A B),
    whereas the value of the expression

	    (let ((quote car))
	      (quote (a b)))

    should (clearly?) be the symbol A.  That is, in the language of the
    now-passe syntactic closures proposal, the syntax '<datum> should be
    parsed by the language processor as a syntactic closure of the
    expression (quote <datum>) in the initial syntactic environment.

Again, according to the standards, quote is syntax for creating
constants. If you treat it as a macro it must be hygenic. The
standards also state that '<datum> is the same as (quote <datum>).

    Of course, a similar story should hold for the expression `<datum>. 
    There is room for disagreement about the "," and ",@" constructions,
    depending upon your view of auxiliary syntactic keywords, like ELSE and
    =>.

    Once one says that this is true, though, there remains the question of
    What the READ procedure does with such constructions.  Recall that
    language processors need not use READ for their scanning and parsing...

I'm not sure that READ is really relevant to the issues.

Excuse me if Pavel's argument is about what he would like the
semantics of these expressions to be. My comments were on what I think
the semantics currently are.

-Mark