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

Re: small changes

       Can we flush internal DEFINE and get Abelson & Sussman w/Sussman to make
       a new edition without it?
   I would object as strongly as I possibly could to this (and other
   people at MIT would also).  It is not essential as it is, and does not
   imply first class environments or side-effected lambda environments
   anyway.  The only thing it implies (if anything), is a more
   complicated LAMBDA special form to "scan out" the defines and "turn
   them into" LETREC.

This was intended in jest, but since you responded, I have to give my
reasoning.  Inclusion of internal define is indeed optional, but it
does destroy one of our (people at Indiana) favorite programming styles,
namely the use of define within let to establish one or more globally
visible values sharing internal identifiers, especially state variables
and help functions:

    (let ([state-var1 ...] ...
          [help-fcn1 (lambda (...) ...)] ...)
       (define var1 ...)
       (define var2 ...))

We do not view the use "empty" defines outside and set! inside as a
viable alternative, since that is clumsy and implies assignment rather
than definition.

As for defense of the feature itself, I feel that gumming up LAMBDA is
the worst possible thing we can do to Scheme.  It wasn't so long ago
that it was a page of code to write a full Scheme interpreter.  Now it
is a page of code to handle lambda alone!
       I would also like to bring up the case insensitivity issue once again.
       Yes, I do prefer that A-Symbol and a-symbol be different.  I like to use
       case to set off certain things, like X for set and x for the element in
       (member x X).  I see no value in having case-insensitive symbols, and
       a lot of conversion trouble.  I think most of us now have terminals with
       lower-case letters.  I would like the special-form keywords and function
       names to be in lower case.
   I find C impossibly hard to read precisely because people use
   identifiers which differ only in case for different things.  This is
   even worse than the dual environment of Common Lisp (value cell vs.
   function cell).

I have the same problem with people who, in Lisp, use upper case in
some places and lower case in others and mean the same identifier.
   Natural languages do not usually have different meanings for words
   with different capitalizations.
   (if (If iF) (IF iF) (If If))	;yipee!

I disagree that natural languages do not usually have different
meanings for words with different captitalizations; some good
examples are given in a recent submission to SIGPLAN notices (Mark
Wells, V21 #3, March 86, p.  21).  (The article in question is
actually rather interesting, if you filter out the advertisements
for Modcap.)

This is at best a sylistic issue that should not be enforced by an
otherwise useless and sometimes confusing restriction on the lexical
syntax of the language.