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

Andrew Shalit alms at clozure.com
Tue Jan 26 20:17:52 UTC 2010


It's the no-man's land between Canada and Luxembourg, also known as the "Canadian-Luxembourg Zone".  The region has very strict programming rules.



On Jan 26, 2010, at 3:11 PM, Gary Byers wrote:

> What the hell is "CLZ" ?
> 
> 
> On Tue, 26 Jan 2010, 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
>> 
>> 
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list