1
0
Fork 0
cl-sites/HyperSpec-7-0/HyperSpec/Body/m_defi_5.htm
2024-04-01 10:24:07 +02:00

212 lines
21 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: Macro DEFINE-CONDITION</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="m_ignore.htm">
<LINK REL=UP HREF="c_condit.htm">
<LINK REL=NEXT HREF="f_mk_cnd.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="m_ignore.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Previous]" SRC="../Graphics/Prev.gif" ALIGN=Bottom></A><A REL=UP HREF="c_condit.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Up]" SRC="../Graphics/Up.gif" ALIGN=Bottom></A><A REL=NEXT HREF="f_mk_cnd.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Next]" SRC="../Graphics/Next.gif" ALIGN=Bottom></A></H1>
<HR>
<A NAME="define-condition"><I>Macro</I> <B>DEFINE-CONDITION</B></A> <P>
<P>
<P>
<P><B>Syntax:</B><P>
<P>
<B>define-condition</B> <I>name (<I>parent-type</I><B>*</B>) ({<I>slot-spec</I>}<B>*</B>) <I>option</I><B>*</B></I><P> =&gt; <I>name</I><P>
<P>
<PRE>
slot-spec::= slot-name | (slot-name slot-option)
</PRE>
<PRE>
slot-option::= [[{:reader <A REL=DEFINITION HREF="26_glo_s.htm#symbol">symbol</A>}* |
{:writer function-name}* |
{:accessor <A REL=DEFINITION HREF="26_glo_s.htm#symbol">symbol</A>}* |
{:allocation allocation-type} |
{:initarg <A REL=DEFINITION HREF="26_glo_s.htm#symbol">symbol</A>}* |
{:initform <A REL=DEFINITION HREF="26_glo_f.htm#form">form</A>} |
{:type type-specifier} ]]
</PRE>
<PRE>
option::= [[(:default-initargs . initarg-list) |
(:documentation <A REL=DEFINITION HREF="26_glo_s.htm#string">string</A>) |
(:report report-name) ]]
</PRE>
<PRE>
function-name::= {<A REL=DEFINITION HREF="26_glo_s.htm#symbol">symbol</A> | (setf <A REL=DEFINITION HREF="26_glo_s.htm#symbol">symbol</A>)}
</PRE>
<PRE>
allocation-type::= :instance | :class
</PRE>
<PRE>
report-name::= <A REL=DEFINITION HREF="26_glo_s.htm#string">string</A> | <A REL=DEFINITION HREF="26_glo_s.htm#symbol">symbol</A> | <A REL=DEFINITION HREF="26_glo_l.htm#lambda_expression">lambda expression</A>
</PRE>
<P>
<P><B>Arguments and Values:</B><P>
<P>
<I>name</I>---a <A REL=DEFINITION HREF="26_glo_s.htm#symbol"><I>symbol</I></A>. <P>
<I>parent-type</I>---a <A REL=DEFINITION HREF="26_glo_s.htm#symbol"><I>symbol</I></A> naming a <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A>. If no <I>parent-types</I> are supplied, the <I>parent-types</I> default to <TT>(condition)</TT>. <P>
<I>default-initargs</I>---a <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A> of <A REL=DEFINITION HREF="26_glo_k.htm#keywordSLvalue_pair"><I>keyword/value pairs</I></A>. <P>
<P>
<I>Slot-spec</I> -- the <A REL=DEFINITION HREF="26_glo_n.htm#name"><I>name</I></A> of a <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> or a <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A> consisting of the <I>slot-name</I> followed by zero or more <I>slot-options</I>. <P>
<I>Slot-name</I> -- a slot name (a <A REL=DEFINITION HREF="26_glo_s.htm#symbol"><I>symbol</I></A>), the <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A> of a slot name, or the <A REL=DEFINITION HREF="26_glo_l.htm#list"><I>list</I></A> of slot name/slot form pairs. <P>
<I>Option</I> -- Any of the following: <P>
<P><DL><P>
<DT><TT>:reader</TT> <P><DD>
<TT>:reader</TT> can be supplied more than once for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> and cannot be <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>. <P>
<DT><TT>:writer</TT> <P><DD>
<TT>:writer</TT> can be supplied more than once for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> and must name a <A REL=DEFINITION HREF="26_glo_g.htm#generic_function"><I>generic function</I></A>. <P>
<DT><TT>:accessor</TT> <P><DD>
<TT>:accessor</TT> can be supplied more than once for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> and cannot be <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>. <P>
<DT><TT>:allocation</TT> <P><DD>
<TT>:allocation</TT> can be supplied once at most for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. The default if <TT>:allocation</TT> is not supplied is <TT>:instance</TT>. <P>
<DT><TT>:initarg</TT> <P><DD>
<TT>:initarg</TT> can be supplied more than once for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. <P>
<DT><TT>:initform</TT> <P><DD>
<TT>:initform</TT> can be supplied once at most for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. <P>
<DT><TT>:type</TT> <P><DD>
<TT>:type</TT> can be supplied once at most for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. <P>
<DT><TT>:documentation</TT> <P><DD>
<TT>:documentation</TT> can be supplied once at most for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. <P>
<DT><TT>:report</TT> <P><DD>
<TT>:report</TT> can be supplied once at most. <P>
<P></DL> <P>
<P><B>Description:</B><P>
<P>
<A REL=DEFINITION HREF="#define-condition"><B>define-condition</B></A> defines a new condition type called <I>name</I>, which is a <A REL=DEFINITION HREF="26_glo_s.htm#subtype"><I>subtype</I></A> of the <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> or <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>types</I></A> named by <I>parent-type</I>. Each <I>parent-type</I> argument specifies a direct <A REL=DEFINITION HREF="26_glo_s.htm#supertype"><I>supertype</I></A> of the new <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A>. The new <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> inherits <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slots</I></A> and <A REL=DEFINITION HREF="26_glo_m.htm#method"><I>methods</I></A> from each of its direct <A REL=DEFINITION HREF="26_glo_s.htm#supertype"><I>supertypes</I></A>, and so on. <P>
If a slot name/slot form pair is supplied, the slot form is a <A REL=DEFINITION HREF="26_glo_f.htm#form"><I>form</I></A> that can be evaluated by <A REL=DEFINITION HREF="f_mk_cnd.htm#make-condition"><B>make-condition</B></A> to produce a default value when an explicit value is not provided. If no slot form is supplied, the contents of the <I>slot</I> is initialized in an <A REL=DEFINITION HREF="26_glo_i.htm#implementation-dependent"><I>implementation-dependent</I></A> way. <P>
If the <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> being defined and some other <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> from which it inherits have a slot by the same name, only one slot is allocated in the <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A>, but the supplied slot form overrides any slot form that might otherwise have been inherited from a <I>parent-type</I>. If no slot form is supplied, the inherited slot form (if any) is still visible. <P>
Accessors are created according to the same rules as used by <A REL=DEFINITION HREF="m_defcla.htm#defclass"><B>defclass</B></A>. <P>
A description of <I>slot-options</I> follows: <P>
<P>
<P><DL><P>
<DT><TT>:reader</TT> <P><DD>
The <TT>:reader</TT> slot option specifies that an <A REL=DEFINITION HREF="26_glo_u.htm#unqualified_method"><I>unqualified method</I></A> is to be defined on the <A REL=DEFINITION HREF="26_glo_g.htm#generic_function"><I>generic function</I></A> named by the argument to <TT>:reader</TT> to read the value of the given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. <P>
<DT>* The <TT>:initform</TT> slot option is used to provide a default initial value form to be used in the initialization of the <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. This <A REL=DEFINITION HREF="26_glo_f.htm#form"><I>form</I></A> is evaluated every time it is used to initialize the <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. The <A REL=DEFINITION HREF="26_glo_l.htm#lexical_environment"><I>lexical environment</I></A> in which this <A REL=DEFINITION HREF="26_glo_f.htm#form"><I>form</I></A> is evaluated is the lexical <A REL=DEFINITION HREF="26_glo_e.htm#environment"><I>environment</I></A> in which the <A REL=DEFINITION HREF="#define-condition"><B>define-condition</B></A> form was evaluated. Note that the <A REL=DEFINITION HREF="26_glo_l.htm#lexical_environment"><I>lexical environment</I></A> refers both to variables and to <A REL=DEFINITION HREF="26_glo_f.htm#function"><I>functions</I></A>. For <A REL=DEFINITION HREF="26_glo_l.htm#local_slot"><I>local slots</I></A>, the <A REL=DEFINITION HREF="26_glo_d.htm#dynamic_environment"><I>dynamic environment</I></A> is the dynamic <A REL=DEFINITION HREF="26_glo_e.htm#environment"><I>environment</I></A> in which <A REL=DEFINITION HREF="f_mk_cnd.htm#make-condition"><B>make-condition</B></A> was called; for <A REL=DEFINITION HREF="26_glo_s.htm#shared_slot"><I>shared slots</I></A>, the <A REL=DEFINITION HREF="26_glo_d.htm#dynamic_environment"><I>dynamic environment</I></A> is the <A REL=DEFINITION HREF="26_glo_d.htm#dynamic_environment"><I>dynamic environment</I></A> in which the <A REL=DEFINITION HREF="#define-condition"><B>define-condition</B></A> form was evaluated. <P><DD>
No implementation is permitted to extend the syntax of <A REL=DEFINITION HREF="#define-condition"><B>define-condition</B></A> to allow <TT>(</TT><I>slot-name</I><TT> </TT><I>form</I><TT>)</TT> as an abbreviation for <TT>(</TT><I>slot-name</I><TT> :initform </TT><I>form</I><TT>)</TT>. <P>
<DT><TT>:initarg</TT> <P><DD>
The <TT>:initarg</TT> slot option declares an initialization argument named by its <A REL=DEFINITION HREF="26_glo_s.htm#symbol"><I>symbol</I></A> argument and specifies that this initialization argument initializes the given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. If the initialization argument has a value in the call to <A REL=DEFINITION HREF="f_init_i.htm#initialize-instance"><B>initialize-instance</B></A>, the value is stored into the given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>, and the slot's <TT>:initform</TT> slot option, if any, is not evaluated. If none of the initialization arguments specified for a given <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> has a value, the <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> is initialized according to the <TT>:initform</TT> slot option, if specified. <P>
<DT><TT>:type</TT> <P><DD>
The <TT>:type</TT> slot option specifies that the contents of the <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> is always of the specified <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A>. It effectively declares the result type of the reader generic function when applied to an <A REL=DEFINITION HREF="26_glo_o.htm#object"><I>object</I></A> of this <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> type. The consequences of attempting to store in a <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> a value that does not satisfy the type of the <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A> is undefined. <P>
<DT><TT>:default-initargs</TT> <P><DD>
This option is treated the same as it would be <A REL=DEFINITION HREF="m_defcla.htm#defclass"><B>defclass</B></A>. <P>
<DT><TT>:documentation</TT> <P><DD>
The <TT>:documentation</TT> slot option provides a <A REL=DEFINITION HREF="26_glo_d.htm#documentation_string"><I>documentation string</I></A> for the <A REL=DEFINITION HREF="26_glo_s.htm#slot"><I>slot</I></A>. <P>
<DT><TT>:report</TT> <P><DD>
<A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>Condition</I></A> reporting is mediated through the <A REL=DEFINITION HREF="f_pr_obj.htm#print-object"><B>print-object</B></A> method for the <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> type in question, with <A REL=DEFINITION HREF="v_pr_esc.htm#STprint-escapeST"><B>*print-escape*</B></A> always being <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>. Specifying <TT>(:report </TT><I>report-name</I><TT>)</TT> in the definition of a condition type <TT>C</TT> is equivalent to: <P>
<PRE>
(defmethod print-object ((x c) stream)
(if *print-escape* (call-next-method) (report-name x stream)))
</PRE>
</TT> <P>
If the value supplied by the argument to <TT>:report</TT> (<I>report-name</I>) is a <A REL=DEFINITION HREF="26_glo_s.htm#symbol"><I>symbol</I></A> or a <A REL=DEFINITION HREF="26_glo_l.htm#lambda_expression"><I>lambda expression</I></A>, it must be acceptable to <A REL=DEFINITION HREF="s_fn.htm#function"><B>function</B></A>. <TT>(function </TT><I>report-name</I><TT>)</TT> is evaluated in the current <A REL=DEFINITION HREF="26_glo_l.htm#lexical_environment"><I>lexical environment</I></A>. It should return a <A REL=DEFINITION HREF="26_glo_f.htm#function"><I>function</I></A> of two arguments, a <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> and a <A REL=DEFINITION HREF="26_glo_s.htm#stream"><I>stream</I></A>, that prints on the <A REL=DEFINITION HREF="26_glo_s.htm#stream"><I>stream</I></A> a description of the <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A>. This <A REL=DEFINITION HREF="26_glo_f.htm#function"><I>function</I></A> is called whenever the <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> is printed while <A REL=DEFINITION HREF="v_pr_esc.htm#STprint-escapeST"><B>*print-escape*</B></A> is <A REL=DEFINITION HREF="a_nil.htm#nil"><B>nil</B></A>. <P>
If <I>report-name</I> is a <A REL=DEFINITION HREF="26_glo_s.htm#string"><I>string</I></A>, it is a shorthand for <P>
<PRE>
(lambda (condition stream)
(declare (ignore condition))
(write-string report-name stream))
</PRE>
</TT> <P>
This option is processed after the new <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> type has been defined, so use of the <I>slot</I> accessors within the <TT>:report</TT> function is permitted. If this option is not supplied, information about how to report this type of <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> is inherited from the <I>parent-type</I>. <P>
<P></DL><P>
The consequences are unspecifed if an attempt is made to <A REL=DEFINITION HREF="26_glo_r.htm#read"><I>read</I></A> a <I>slot</I> that has not been explicitly initialized and that has not been given a default value. <P>
The consequences are unspecified if an attempt is made to assign the <I>slots</I> by using <A REL=DEFINITION HREF="m_setf_.htm#setf"><B>setf</B></A>. <P>
If a <A REL=DEFINITION HREF="#define-condition"><B>define-condition</B></A> <A REL=DEFINITION HREF="26_glo_f.htm#form"><I>form</I></A> appears as a <A REL=DEFINITION HREF="26_glo_t.htm#top_level_form"><I>top level form</I></A>, the <A REL=DEFINITION HREF="26_glo_c.htm#compiler"><I>compiler</I></A> must make <I>name</I> recognizable as a valid <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> name, and it must be possible to reference the <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> as the <I>parent-type</I> of another <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> in a subsequent <A REL=DEFINITION HREF="#define-condition"><B>define-condition</B></A> <A REL=DEFINITION HREF="26_glo_f.htm#form"><I>form</I></A> in the <A REL=DEFINITION HREF="26_glo_f.htm#file"><I>file</I></A> being compiled. <P>
<P><B>Examples:</B><P>
<P>
The following form defines a condition of <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> <TT>peg/hole-mismatch</TT> which inherits from a condition type called <TT>blocks-world-error</TT>: <P>
<PRE>
(define-condition peg/hole-mismatch
(blocks-world-error)
((peg-shape :initarg :peg-shape
:reader peg/hole-mismatch-peg-shape)
(hole-shape :initarg :hole-shape
:reader peg/hole-mismatch-hole-shape))
(:report (lambda (condition stream)
(format stream &quot;A ~A peg cannot go in a ~A hole.&quot;
(peg/hole-mismatch-peg-shape condition)
(peg/hole-mismatch-hole-shape condition)))))
</PRE>
</TT> <P>
The new type has slots <TT>peg-shape</TT> and <TT>hole-shape</TT>, so <A REL=DEFINITION HREF="f_mk_cnd.htm#make-condition"><B>make-condition</B></A> accepts <TT>:peg-shape</TT> and <TT>:hole-shape</TT> keywords. The <A REL=DEFINITION HREF="26_glo_r.htm#reader"><I>readers</I></A> <TT>peg/hole-mismatch-peg-shape</TT> and <TT>peg/hole-mismatch-hole-shape</TT> apply to objects of this type, as illustrated in the <TT>:report</TT> information. <P>
The following form defines a <A REL=DEFINITION HREF="26_glo_c.htm#condition"><I>condition</I></A> <A REL=DEFINITION HREF="26_glo_t.htm#type"><I>type</I></A> named <TT>machine-error</TT> which inherits from <A REL=DEFINITION HREF="e_error.htm#error"><B>error</B></A>: <P>
<PRE>
(define-condition machine-error
(error)
((machine-name :initarg :machine-name
:reader machine-error-machine-name))
(:report (lambda (condition stream)
(format stream &quot;There is a problem with ~A.&quot;
(machine-error-machine-name condition)))))
</PRE>
</TT> <P>
Building on this definition, a new error condition can be defined which is a subtype of <TT>machine-error</TT> for use when machines are not available: <P>
<PRE>
(define-condition machine-not-available-error (machine-error) ()
(:report (lambda (condition stream)
(format stream &quot;The machine ~A is not available.&quot;
(machine-error-machine-name condition)))))
</PRE>
</TT> <P>
This defines a still more specific condition, built upon <TT>machine-not-available-error</TT>, which provides a slot initialization form for <TT>machine-name</TT> but which does not provide any new slots or report information. It just gives the <TT>machine-name</TT> slot a default initialization: <P>
<PRE>
(define-condition my-favorite-machine-not-available-error
(machine-not-available-error)
((machine-name :initform &quot;mc.lcs.mit.edu&quot;)))
</PRE>
</TT> <P>
Note that since no <TT>:report</TT> clause was given, the information inherited from <TT>machine-not-available-error</TT> is used to report this type of condition. <P>
<PRE>
(define-condition ate-too-much (error)
((person :initarg :person :reader ate-too-much-person)
(weight :initarg :weight :reader ate-too-much-weight)
(kind-of-food :initarg :kind-of-food
:reader :ate-too-much-kind-of-food)))
=&gt; ATE-TOO-MUCH
(define-condition ate-too-much-ice-cream (ate-too-much)
((kind-of-food :initform 'ice-cream)
(flavor :initarg :flavor
:reader ate-too-much-ice-cream-flavor
:initform 'vanilla ))
(:report (lambda (condition stream)
(format stream &quot;~A ate too much ~A ice-cream&quot;
(ate-too-much-person condition)
(ate-too-much-ice-cream-flavor condition)))))
=&gt; ATE-TOO-MUCH-ICE-CREAM
(make-condition 'ate-too-much-ice-cream
:person 'fred
:weight 300
:flavor 'chocolate)
=&gt; #&lt;ATE-TOO-MUCH-ICE-CREAM 32236101&gt;
(format t &quot;~A&quot; *)
&gt;&gt; FRED ate too much CHOCOLATE ice-cream
=&gt; NIL
</PRE>
</TT> <P>
<P><B>Affected By:</B> None.
<P>
<P><B>Exceptional Situations:</B> None.
<P>
<P><B>See Also:</B><P>
<P>
<A REL=DEFINITION HREF="f_mk_cnd.htm#make-condition"><B>make-condition</B></A>, <A REL=DEFINITION HREF="m_defcla.htm#defclass"><B>defclass</B></A>, <A REL=CHILD HREF="09_a.htm">Section 9.1 (Condition System Concepts)</A> <P>
<P><B>Notes:</B> None.
<P>
<P>
<P><HR>The following <A REL=META HREF="../Front/X3J13Iss.htm">X3J13 cleanup issues</A>, <I>not part of the specification</I>, apply to this section:<P><UL><LI> <A REL=CHILD HREF="../Issues/iss059.htm">COMPILE-FILE-HANDLING-OF-TOP-LEVEL-FORMS:CLARIFY</A><LI> <A REL=CHILD HREF="../Issues/iss049.htm">CLOS-CONDITIONS:INTEGRATE</A><LI> <A REL=CHILD HREF="../Issues/iss102.htm">DEFINE-CONDITION-SYNTAX:INCOMPATIBLY-MORE-LIKE-DEFCLASS+EMPHASIZE-READ-ONLY</A><P></UL><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>