137 lines
10 KiB
HTML
137 lines
10 KiB
HTML
<!-- Common Lisp HyperSpec (TM), version 7.0 generated by Kent M. Pitman on Mon, 11-Apr-2005 2:31am EDT -->
|
|
<HTML>
|
|
<HEAD>
|
|
<TITLE>CLHS: Issue GET-MACRO-CHARACTER-READTABLE Writeup</TITLE>
|
|
<LINK HREF="../Data/clhs.css" REL="stylesheet" TYPE="text/css" />
|
|
<META HTTP-EQUIV="Author" CONTENT="Kent M. Pitman">
|
|
<META HTTP-EQUIV="Organization" CONTENT="LispWorks Ltd.">
|
|
<LINK REL=TOP HREF="../Front/index.htm">
|
|
<LINK REL=COPYRIGHT HREF="../Front/Help.htm#Legal">
|
|
<LINK REL=DISCLAIMER HREF="../Front/Help.htm#Disclaimer">
|
|
<LINK REL=PREV HREF="../Issues/iss183_w.htm">
|
|
<LINK REL=UP HREF="../Issues/iss184.htm">
|
|
<LINK REL=NEXT HREF="../Issues/iss185_w.htm">
|
|
</HEAD>
|
|
<BODY>
|
|
<H1><A REV=MADE HREF="http://www.lispworks.com/"><IMG WIDTH=80 HEIGHT=65 ALT="[LISPWORKS]" SRC="../Graphics/LWSmall.gif" ALIGN=Bottom></A><A REL=TOP HREF="../Front/index.htm"><IMG WIDTH=237 HEIGHT=65 ALT="[Common Lisp HyperSpec (TM)]" SRC="../Graphics/CLHS_Sm.gif" ALIGN=Bottom></A> <A REL=PREV HREF="../Issues/iss183_w.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Previous]" SRC="../Graphics/Prev.gif" ALIGN=Bottom></A><A REL=UP HREF="../Issues/iss184.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Up]" SRC="../Graphics/Up.gif" ALIGN=Bottom></A><A REL=NEXT HREF="../Issues/iss185_w.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Next]" SRC="../Graphics/Next.gif" ALIGN=Bottom></A></H1>
|
|
|
|
<HR>
|
|
|
|
|
|
|
|
<H2>Issue GET-MACRO-CHARACTER-READTABLE Writeup</H2>
|
|
|
|
<PRE><B>Status:</B> Passed, Jan 89 X3J13<P>
|
|
<B>Forum:</B> Cleanup<P>
|
|
<B>Issue:</B> <A HREF="iss184.htm">GET-MACRO-CHARACTER-READTABLE</A><P>
|
|
<P>
|
|
<B>References:</B> CLtL p.361: <A REL=DEFINITION HREF="../Body/f_cp_rdt.htm#copy-readtable"><B>COPY-READTABLE</B></A>, <A REL=DEFINITION HREF="../Body/f_set_sy.htm#set-syntax-from-char"><B>SET-SYNTAX-FROM-CHAR</B></A>, and<P>
|
|
<A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>GET-MACRO-CHARACTER</B></A><P>
|
|
CLtL p.364: <A REL=DEFINITION HREF="../Body/f_set__1.htm#get-dispatch-macro-character"><B>GET-DISPATCH-MACRO-CHARACTER</B></A>, <P>
|
|
CLtL p.378: Example in middle of page<P>
|
|
<P>
|
|
<B>Category:</B> CLARIFICATION/CHANGE<P>
|
|
<P>
|
|
<B>Edit history:</B> Version 1, 16-Nov-88, by JonL<P>
|
|
Version 2, 8-Dec-88, by Masinter (fix typo)<P>
|
|
Version 3, 11-Feb-89, as amended Jan 89 X3J13<P>
|
|
<P>
|
|
<P>
|
|
<B>Problem description:<P>
|
|
</B><P>
|
|
The '<A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A>' argument to <A REL=DEFINITION HREF="../Body/f_set__1.htm#get-dispatch-macro-character"><B>GET-DISPATCH-MACRO-CHARACTER</B></A> and to<P>
|
|
<A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>GET-MACRO-CHARACTER</B></A> must be of type <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>READTABLE</B></A>, without mention of<P>
|
|
what happens when <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>NIL</B></A> is supplied. This may have been simply<P>
|
|
an oversight, since it makes more sense for it to refer to values from<P>
|
|
the <A REL=DEFINITION HREF="../Body/07_ffb.htm#standard"><B>standard</B></A> <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A>. Both <A REL=DEFINITION HREF="../Body/f_cp_rdt.htm#copy-readtable"><B>COPY-READTABLE</B></A> and <A REL=DEFINITION HREF="../Body/f_set_sy.htm#set-syntax-from-char"><B>SET-SYNTAX-FROM-CHAR</B></A><P>
|
|
explicitly say that a <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>NIL</B></A> in the 'from-readtable' argument refers to the<P>
|
|
<A REL=DEFINITION HREF="../Body/07_ffb.htm#standard"><B>standard</B></A> <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A>. Also, an example in the middle of the page, CLtL<P>
|
|
p.378, supplies a <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>NIL</B></A> to <A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>GET-MACRO-CHARACTER</B></A>, and is clearly intending<P>
|
|
to access the <A REL=DEFINITION HREF="../Body/07_ffb.htm#standard"><B>standard</B></A> <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A> values.<P>
|
|
<P>
|
|
<P>
|
|
Proposal (<A HREF="iss184.htm">GET-MACRO-CHARACTER-READTABLE:NIL-STANDARD</A>)<P>
|
|
<P>
|
|
Specify that a <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>NIL</B></A> <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A> argument to <A REL=DEFINITION HREF="../Body/f_set__1.htm#get-dispatch-macro-character"><B>GET-DISPATCH-MACRO-CHARACTER</B></A><P>
|
|
and to <A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>GET-MACRO-CHARACTER</B></A> mean the same thing it does for <A REL=DEFINITION HREF="../Body/f_cp_rdt.htm#copy-readtable"><B>COPY-READTABLE</B></A>,<P>
|
|
and SET-SYNTAX-FROM-CHAR; namely a reference to the <A REL=DEFINITION HREF="../Body/07_ffb.htm#standard"><B>standard</B></A> <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A>. <P>
|
|
Thus (<A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>GET-MACRO-CHARACTER</B></A> <char> <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>NIL</B></A>) would be equivalent to <P>
|
|
(<A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>GET-MACRO-CHARACTER</B></A> <char> (<A REL=DEFINITION HREF="../Body/f_cp_rdt.htm#copy-readtable"><B>COPY-READTABLE</B></A>)), but without consing.<P>
|
|
<P>
|
|
<B>Rationale:<P>
|
|
</B><P>
|
|
Probably was the original intent; somebody wants it; also see "Esthetics".<P>
|
|
<P>
|
|
<B>Current practice:<P>
|
|
</B><P>
|
|
Symbolics and Xerox have already implemented the proposal; Lucid, VAXLISP,<P>
|
|
and KCL stuck to the more rigid interpretation.<P>
|
|
<P>
|
|
<P>
|
|
<B>Cost to Implementors:<P>
|
|
</B><P>
|
|
Trivial.<P>
|
|
<P>
|
|
<B>Cost to Users:<P>
|
|
</B><P>
|
|
None.<P>
|
|
<P>
|
|
<B>Cost of non-adoption:<P>
|
|
</B><P>
|
|
Minor worry about porting between implementations that support the<P>
|
|
generalization and those that don't; minor worry about consing when<P>
|
|
calling (<A REL=DEFINITION HREF="../Body/f_cp_rdt.htm#copy-readtable"><B>COPY-READTABLE</B></A>) to get at <A REL=DEFINITION HREF="../Body/07_ffb.htm#standard"><B>standard</B></A> <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A> semantics.<P>
|
|
<P>
|
|
<B>Performance impact:<P>
|
|
</B><P>
|
|
See "Cost of non-adoption".<P>
|
|
<P>
|
|
<B>Benefits:<P>
|
|
</B><P>
|
|
See "Cost of non-adoption".<P>
|
|
<P>
|
|
<B>Esthetics:<P>
|
|
</B><P>
|
|
Increases parallel design among similar <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A> functions.<P>
|
|
<P>
|
|
<B>Discussion:<P>
|
|
</B><P>
|
|
This question was raised in the Common Lisp mailing last summer:<P>
|
|
Date: 19 Jul 88 13:35<P>
|
|
Subject: Question about <A REL=DEFINITION HREF="../Body/t_rdtabl.htm#readtable"><B>readtable</B></A> null arguments<P>
|
|
From: quiroz%cs.rochester:EDU:Xerox<P>
|
|
To: common-lisp%sail.stanford:EDU:Xerox<P>
|
|
<P>
|
|
This issue passed at the Jan 89 X3J13 meeting. The only<P>
|
|
difference between version 2 and 3 was to remove the<P>
|
|
<B>test case because of problems of "function equivalence":<P>
|
|
</B><P>
|
|
If "same-function-p" compared functions:<P>
|
|
<P>
|
|
(<A REL=DEFINITION HREF="../Body/s_let_l.htm#let"><B>let</B></A> ((standard-rt (<A REL=DEFINITION HREF="../Body/f_cp_rdt.htm#copy-readtable"><B>copy-readtable</B></A>))<P>
|
|
(chars '(#\* #\= #\| #\A #\ #\( #\# #\1)))<P>
|
|
;; Test Case 1<P>
|
|
(<A REL=DEFINITION HREF="../Body/m_dolist.htm#dolist"><B>dolist</B></A> (<A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A> chars)<P>
|
|
(<A REL=DEFINITION HREF="../Body/m_assert.htm#assert"><B>assert</B></A> (same-function-p (<A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>get-macro-character</B></A> <A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A> <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>nil</B></A>)<P>
|
|
(<A REL=DEFINITION HREF="../Body/f_set_ma.htm#get-macro-character"><B>get-macro-character</B></A> <A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A> standard-rt))<P>
|
|
() "Lose on <A REL=DEFINITION HREF="../Body/a_ch.htm#character"><B>character</B></A> ~C" <A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A>))<P>
|
|
;; Test Case 2<P>
|
|
(<A REL=DEFINITION HREF="../Body/m_dolist.htm#dolist"><B>dolist</B></A> (<A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A> chars)<P>
|
|
(<A REL=DEFINITION HREF="../Body/m_assert.htm#assert"><B>assert</B></A> (same-function-p (<A REL=DEFINITION HREF="../Body/f_set__1.htm#get-dispatch-macro-character"><B>get-dispatch-macro-character</B></A> #\# <A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A> <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>nil</B></A>)<P>
|
|
(<A REL=DEFINITION HREF="../Body/f_set__1.htm#get-dispatch-macro-character"><B>get-dispatch-macro-character</B></A> #\# <A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A> standard-rt))<P>
|
|
() "Lose on #\# dispatch <A REL=DEFINITION HREF="../Body/a_ch.htm#character"><B>character</B></A> ~C" <A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A>))<P>
|
|
;; Test Case 3<P>
|
|
(<A REL=DEFINITION HREF="../Body/m_assert.htm#assert"><B>assert</B></A> (same-function-p (<A REL=DEFINITION HREF="../Body/f_set__1.htm#get-dispatch-macro-character"><B>get-dispatch-macro-character</B></A> #\# #\A <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>nil</B></A>)<P>
|
|
(<A REL=DEFINITION HREF="../Body/f_set__1.htm#get-dispatch-macro-character"><B>get-dispatch-macro-character</B></A> #\# #\a <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>nil</B></A>))<P>
|
|
() "Lose on #\# dispatch <A REL=DEFINITION HREF="../Body/a_ch.htm#character"><B>character</B></A> ~C" <A REL=DEFINITION HREF="../Body/f_char_.htm#char"><B>char</B></A>)<P>
|
|
)<P>
|
|
<P>
|
|
<P>
|
|
</PRE>
|
|
<HR>
|
|
|
|
<A REL=NAVIGATOR HREF="../Front/StartPts.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Starting Points]" SRC="../Graphics/StartPts.gif" ALIGN=Bottom></A><A REL=TOC HREF="../Front/Contents.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Contents]" SRC="../Graphics/Contents.gif" ALIGN=Bottom></A><A REL=INDEX HREF="../Front/X_Master.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Index]" SRC="../Graphics/Index.gif" ALIGN=Bottom></A><A REL=INDEX HREF="../Front/X_Symbol.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Symbols]" SRC="../Graphics/Symbols.gif" ALIGN=Bottom></A><A REL=GLOSSARY HREF="../Body/26_a.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Glossary]" SRC="../Graphics/Glossary.gif" ALIGN=Bottom></A><A HREF="../Front/X3J13Iss.htm"><IMG WIDTH=80 HEIGHT=40 ALT="[Issues]" SRC="../Graphics/Issues.gif" ALIGN=Bottom></A><BR>
|
|
|
|
<A REL=COPYRIGHT HREF="../Front/Help.htm#Legal"><I>Copyright 1996-2005, LispWorks Ltd. All rights reserved.</I></A><P>
|
|
</BODY>
|
|
</HTML>
|