[Openmcl-devel] Error on macro character after sharpsign colon

Ron Garret ron at flownet.com
Tue Jan 26 11:58:56 PST 2010


Just out of curiosity, why would anyone ever want to read an uninterned symbol whose name began with a macro character?

rg

On Jan 26, 2010, at 11:38 AM, Terje Norderhaug wrote:

> Regarding CLZ not allowing a user defined macro character after the  
> #: of an uninterned symbol:
> 
> On Jan 25, 2010, at 1:56 PM, Gary Byers wrote:
>> The spec says:
>> 
>> "A non-terminating macro character is treated as a constituent when
>> it appears in the middle of an extended token being accumulated."
>> 
>> (An initial macro character would cause the function associated with
>> that character to be called in the standard reader algorithm  
>> describted
>> in section 2.2; a token that begins with an unescaped macro character
>> would not have "the syntax of a symbol.")
>> 
>> The spec says that the <<symbol-name>> following #:"must have the
>> syntax of a symbol"; I think that I'd rather have the reader complain
>> when this is violated than quietly accept invalid/undefined syntax.
> 
> Wouldn't it be reasonable to understand "syntax of a symbol" in the  
> spec to refer to the Standard Syntax rather than the user extended  
> syntax? If so, the reader could complain when the symbol name  
> following #: starts with a character in the Standard Readtable yet  
> allow custom macro characters in the Current Readtable.
> 
> Not allowing a user defined macro character after the #: of an  
> uninterned symbol discourages even careful use of custom reader  
> macros. An alternative resolution could be to signal a *continuable*  
> error when encountering an uninterned symbol that starts with a macro  
> character, giving the developer the final say.
> 
>> On Mon, 25 Jan 2010, Terje Norderhaug wrote:
>> 
>>> CLZ fails to read an uninterned symbol if the sharpsign colon is
>>> followed by a macro character. Is this a bug or correct behavior? I
>>> got no wiser by reading the hyperspec, but presume it's in there
>>> somewhere:
>>> 
>>>   http://www.lispworks.com/documentation/lw50/CLHS/Body/02_b.htm
>>> 
>>> Replicate by evaluating the following:
>>> 
>>> (defun symbol-reader (stream char)
>>>   (declare (ignore char))
>>>   (read stream t nil t))
>>> 
>>> (set-macro-character #\! #'symbol-reader T)
>>> 
>>> '!abc
>>> => ABC
>>> 
>>> '#:!abc
>>> => Reader error: Illegal symbol syntax.
>>> 
>>> Backtrace leads to #'read-symbol-token in the l1-reader.
>>> 
>>> LispWorks (5.0 Personal) reads '#:!abc without reporting an error.
>>> Which implementation is right?
>>> 
>>> -- Terje Norderhaug
>>>  terje at in-progress.com
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Openmcl-devel mailing list
>>> Openmcl-devel at clozure.com
>>> http://clozure.com/mailman/listinfo/openmcl-devel
>>> 
>>> 
> 
> -- Terje Norderhaug
>   terje at in-progress.com
> 
> 
> 
> 
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list