Newsgroups: comp.lang.lisp
Path: cantaloupe.srv.cs.cmu.edu!das-news2.harvard.edu!news2.near.net!news.mathworks.com!hookup!olivea!charnel.ecst.csuchico.edu!csusac!csus.edu!netcom.com!hbaker
From: hbaker@netcom.com (Henry G. Baker)
Subject: Re: Common Lisp' dual name space
Message-ID: <hbakerCyIp2t.D3G@netcom.com>
Organization: nil
References: <38sffs$aav@edge.ercnet.com> <38sg00$ai8@edge.ercnet.com>
Date: Mon, 31 Oct 1994 03:16:04 GMT
Lines: 39

In article <38sg00$ai8@edge.ercnet.com> Blake McBride <blake@edge.ercnet.com> writes:
>Name hits are a problem with every language I know (except perhaps 
>APL).  The programmer must know the std lib and not reuse those names.

This is the attitude of most 'standard' programming languages, and it
is just not realistic for a dynamic, growing language.  The next
version of the language is likely to commandeer your carefully chosen
names for its next version/release, leaving it up to you to find out
every place that the new version/release has broken your program.

If a language is to have a library of functions which are called via
syntax which is identical to that for user supplied functions, then it
_must_ also have appropriate mechanisms for _renaming_ or otherwise
_shielding_ the user from new functions which are added to the basic
system.

>The point is that you are treating the data (or variable) version 
>with a different syntax as the normal function.  This causes a gulf
>between the way functions and data-as-functions are treated.  With
>one name space they are treated the same!  Cleaner!

Just think of "(funcall <a> <b> <c> ... <n>)" as the standard function
calling form--e.g., (funcall #'+ 3 4 5) or
(funcall #'(lambda (x y) ...)  <a> <b>).  If you find this repugnant,
then use Common Lisp reader syntax macros to provide the conversion
for you.  There have _always_ been Lisp lists that didn't stand for
function calls -- e.g., (lambda (x) ...), (if ...), (cond ...).  What
these are _supposed_ to be are 'special forms', or if you have an
object-oriented language, you can define a whole host of special kinds
of objects which represent the different kinds of forms.

I wouldn't get too excited about the 'function' position being treated
differently; it's just a syntactic representation.  There has been
_far_ too much time, money, bandwidth, etc., wasted on this syntactic
sugar.

      Henry Baker
      Read ftp.netcom.com:/pub/hbaker/README for info on ftp-able papers.

