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

named-let* ; distinct ids in binding forms



A while back someone in this newsgroup asked if there were plans to add
a named-let* to official Scheme.  I don't recall an answer to this. 
I often find a named-let* useful, but really don't care if it becomes 
official.  I just wondered what the status of this issue was.

By named-let* I mean something like the following*:
   (described in Eugene Kohlbecker's extend-syntax):

(extend-syntax (named-let*)
   ((named-let* loop ((x1 v1) ...) e1 e2 ...)
    (andmap symbol? '(loop x1 ...))
    (let* ((x1 v1) ...) (let loop ((x1 x1) ...) e1 e2 ...))))

-----

  *Of course, there's no reason to have a separate syntax, they should
   be combined as:

     (extend-syntax (let*)
        [(let* () e1 e2 ...) 
         (begin e1 e2 ...)]
        [(let* ([x1 v1] [x2 v2] ...) e1 e2 ...)
         (andmap symbol? '(x1 x2 ...))
         (let ([x1 v1]) 
            (let* ([x2 v2] ...) e1 e2 ...))]
        [(let* loop ([x1 v1] ...) e1 e2 ...)
         (andmap symbol? '(loop x1 ...))
         (let* ([x1 v1] ...) 
            (let loop ([x1 x1] ...) e1 e2 ...))])

-----

Now this definition assumes that the identifiers bound by a named-let* 
are distinct, but I don't see a reasonable interpretation for the meaning
of such a construction anyway.  Thus the fender for named-let* might be
better written as:
 
       (let ((ids '(loop x1 ...))
             (distinct-symbols? (lambda (lst) {some appropriate defn})))
          (and 
            (andmap symbol? ids)
            (distinct-symbols? ids)))

where distinct-symbols? would have the obvious definition.  Either that,
or multiple instances of the same identifier should be allowed. Any opinions
on that?  (It is required that the name of a named-let be distinct from the
identifiers bound by that let, or not?)

------

I guess in addition to hearing about whether let* will be extended to include
a named form, I'd also like to find out which binding forms must bind only
distinct identifiers, and which need not, and the motivation for these
decisions.

-- Brad Pierce

pierce@CS.UCLA.EDU