405 lines
52 KiB
HTML
405 lines
52 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 TYPE-OF-AND-PREDEFINED-CLASSES 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/iss349_w.htm">
|
|
<LINK REL=UP HREF="../Issues/iss350_m.htm">
|
|
<LINK REL=NEXT HREF="../Issues/iss352_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/iss349_w.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Previous]" SRC="../Graphics/Prev.gif" ALIGN=Bottom></A><A REL=UP HREF="../Issues/iss350_m.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Up]" SRC="../Graphics/Up.gif" ALIGN=Bottom></A><A REL=NEXT HREF="../Issues/iss352_w.htm"><IMG WIDTH=40 HEIGHT=40 ALT="[Next]" SRC="../Graphics/Next.gif" ALIGN=Bottom></A></H1>
|
|
|
|
<HR>
|
|
|
|
|
|
|
|
<H2>Issue TYPE-OF-AND-PREDEFINED-CLASSES Writeup</H2>
|
|
|
|
<PRE><B>Issue:</B> <A HREF="iss350_m.htm">TYPE-OF-AND-PREDEFINED-CLASSES</A><P>
|
|
<B>Forum:</B> Cleanup<P>
|
|
<B>References:</B> Draft 8/29/89, sections 2.2 and 2.3<P>
|
|
Draft 8/29/89, <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A><P>
|
|
Issue <A HREF="iss352.htm">TYPE-OF-UNDERCONSTRAINED</A><P>
|
|
Issue <A HREF="iss090.htm">DATA-TYPES-HIERARCHY-UNDERSPECIFIED</A><P>
|
|
Issue <A HREF="iss175_m.htm">FUNCTION-TYPE</A><P>
|
|
Issue <A HREF="iss163.htm">FLOATING-POINT-CONDITION-NAMES</A><P>
|
|
Issue <A REL=DEFINITION HREF="../Body/e_rder_e.htm#reader-error"><B>READER-ERROR</B></A><P>
|
|
Condition System, Version 18<P>
|
|
<B>Category:</B> Change<P>
|
|
<B>Edit History:</B> Version 1, 1/2/90 by Kim A. Barrett<P>
|
|
Version 2, 2/16/90 by Kim A. Barrett (from Moon's comments)<P>
|
|
<P>
|
|
<B>Problem Description:<P>
|
|
</B><P>
|
|
In the 8/29/89 Draft there are three different lists of built-in type<P>
|
|
specifiers, all of which are slightly different. Since some of the<P>
|
|
differences seem to be simply oversights, it would probably be helpful if they<P>
|
|
could be merged together. <P>
|
|
<P>
|
|
The locations of these lists in the Draft are (1) Section 2.2, in the<P>
|
|
description of the type disjointness requirements in the subsection entitled<P>
|
|
"Type Relationships", (2) Section 2.3, in Figure 2-13 "Classes that correspond<P>
|
|
to pre-defined type specifiers", and (3) in the description of the function<P>
|
|
<A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A>. <P>
|
|
<P>
|
|
The following table indicates which type names do not appear in all three<P>
|
|
places. The groupings were made to facilitate the discussion below. <P>
|
|
<P>
|
|
(1) (2) (3)<P>
|
|
Group 1<P>
|
|
<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> x x<P>
|
|
<A REL=DEFINITION HREF="../Body/a_list.htm#list"><B>LIST</B></A> x x<P>
|
|
<A REL=DEFINITION HREF="../Body/a_logica.htm#logical-pathname"><B>LOGICAL-PATHNAME</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> x x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_rst.htm#restart"><B>RESTART</B></A> x x<P>
|
|
Group 2<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> special x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> special x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> special x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A> special x<P>
|
|
Group 3<P>
|
|
<A REL=DEFINITION HREF="../Body/t_broadc.htm#broadcast-stream"><B>BROADCAST-STREAM</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_concat.htm#concatenated-stream"><B>CONCATENATED-STREAM</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_echo_s.htm#echo-stream"><B>ECHO-STREAM</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_file_s.htm#file-stream"><B>FILE-STREAM</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_stg_st.htm#string-stream"><B>STRING-STREAM</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_syn_st.htm#synonym-stream"><B>SYNONYM-STREAM</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_two_wa.htm#two-way-stream"><B>TWO-WAY-STREAM</B></A> x<P>
|
|
Group 4<P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_bt.htm#simple-bit-vector"><B>SIMPLE-BIT-VECTOR</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_st.htm#simple-string"><B>SIMPLE-STRING</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_ve.htm#simple-vector"><B>SIMPLE-VECTOR</B></A> x<P>
|
|
Group 5<P>
|
|
<A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/e_smp_cn.htm#simple-condition"><B>SIMPLE-CONDITION</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/e_warnin.htm#warning"><B>WARNING</B></A> x<P>
|
|
Group 6<P>
|
|
<A REL=DEFINITION HREF="../Body/t_fixnum.htm#fixnum"><B>FIXNUM</B></A> x<P>
|
|
<A REL=DEFINITION HREF="../Body/t_bignum.htm#bignum"><B>BIGNUM</B></A> x<P>
|
|
<P>
|
|
Proposal (<A HREF="iss350_m.htm">TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND</A>)<P>
|
|
<P>
|
|
1. Make the following changes to the disjointness requirements specified in<P>
|
|
Section 2.2, subsection Type Relationships. This supersedes issue<P>
|
|
<A HREF="iss090.htm">DATA-TYPES-HIERARCHY-UNDERSPECIFIED</A> and the corresponding sections of issue<P>
|
|
<A HREF="iss175_m.htm">FUNCTION-TYPE</A>.<P>
|
|
<P>
|
|
1a. Change the third bullet to<P>
|
|
<P>
|
|
"Among the types which correspond to predefined classes (listed in Figure<P>
|
|
{insert figure number here, currently 2-13 }) only the subtype<P>
|
|
relationships specified for those classes may exist. Any type created by<P>
|
|
<A REL=DEFINITION HREF="../Body/m_defstr.htm#defstruct"><B>DEFSTRUCT</B></A>, <A REL=DEFINITION HREF="../Body/m_defcla.htm#defclass"><B>DEFCLASS</B></A>, or <A REL=DEFINITION HREF="../Body/m_defi_5.htm#define-condition"><B>DEFINE-CONDITION</B></A> is disjoint from any of the<P>
|
|
listed types and from any other type created by these forms, except for<P>
|
|
type relationships explicitly established by specifying superclasses in<P>
|
|
<A REL=DEFINITION HREF="../Body/m_defcla.htm#defclass"><B>DEFCLASS</B></A> or <A REL=DEFINITION HREF="../Body/m_defi_5.htm#define-condition"><B>DEFINE-CONDITION</B></A>, or through the use of the :include option of<P>
|
|
<A REL=DEFINITION HREF="../Body/m_defstr.htm#defstruct"><B>DEFSTRUCT</B></A>."<P>
|
|
<P>
|
|
1b. Strike bullets 4-6 and 21 (since they now follow from bullet 3).<P>
|
|
<P>
|
|
2. Make the following changes to the constraints on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A>.<P>
|
|
<P>
|
|
2a. Change the first constraint on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> to be<P>
|
|
<P>
|
|
"For any object for which (<A REL=DEFINITION HREF="../Body/f_typep.htm#typep"><B>TYPEP</B></A> object type) is true when type is one of<P>
|
|
the types for which there is a corresponding predefined <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> listed in<P>
|
|
Figure { insert figure number here, currently 2-13 }, the result of<P>
|
|
<A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> is a type specifier for which (<A REL=DEFINITION HREF="../Body/f_subtpp.htm#subtypep"><B>SUBTYPEP</B></A> (<A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> object) type)<P>
|
|
returns T T, i.e., either the type or a subtype of it (a subtype that the<P>
|
|
implementation's <A REL=DEFINITION HREF="../Body/f_subtpp.htm#subtypep"><B>SUBTYPEP</B></A> can recognize)."<P>
|
|
<P>
|
|
2b. Change the fifth constraint on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> to also include condition types<P>
|
|
defined with <A REL=DEFINITION HREF="../Body/m_defi_5.htm#define-condition"><B>DEFINE-CONDITION</B></A> and objects created with <A REL=DEFINITION HREF="../Body/f_mk_cnd.htm#make-condition"><B>MAKE-CONDITION</B></A>.<P>
|
|
<P>
|
|
3. Make the following additions to the set of predefined classes.<P>
|
|
<P>
|
|
3a. Add the following condition classes, with the specified <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence<P>
|
|
lists:<P>
|
|
<P>
|
|
<A REL=DEFINITION HREF="../Body/e_arithm.htm#arithmetic-error"><B>ARITHMETIC-ERROR</B></A> (ARITHMENTIC-ERROR <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_cell_e.htm#cell-error"><B>CELL-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_cell_e.htm#cell-error"><B>CELL-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> (<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_contro.htm#control-error"><B>CONTROL-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_contro.htm#control-error"><B>CONTROL-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_divisi.htm#division-by-zero"><B>DIVISION-BY-ZERO</B></A> (<A REL=DEFINITION HREF="../Body/e_divisi.htm#division-by-zero"><B>DIVISION-BY-ZERO</B></A> ARITHMENTIC-ERROR <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_end_of.htm#end-of-file"><B>END-OF-FILE</B></A> (<A REL=DEFINITION HREF="../Body/e_end_of.htm#end-of-file"><B>END-OF-FILE</B></A> <A REL=DEFINITION HREF="../Body/e_stm_er.htm#stream-error"><B>STREAM-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> (<A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_file_e.htm#file-error"><B>FILE-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_file_e.htm#file-error"><B>FILE-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_floa_1.htm#floating-point-inexact"><B>FLOATING-POINT-INEXACT</B></A> (<A REL=DEFINITION HREF="../Body/e_floa_1.htm#floating-point-inexact"><B>FLOATING-POINT-INEXACT</B></A> ARITHMENTIC-ERROR <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_floati.htm#floating-point-invalid-operation"><B>FLOATING-POINT-INVALID-OPERATION</B></A> (<A REL=DEFINITION HREF="../Body/e_floati.htm#floating-point-invalid-operation"><B>FLOATING-POINT-INVALID-OPERATION</B></A><P>
|
|
ARITHMENTIC-ERROR <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_floa_2.htm#floating-point-overflow"><B>FLOATING-POINT-OVERFLOW</B></A> (<A REL=DEFINITION HREF="../Body/e_floa_2.htm#floating-point-overflow"><B>FLOATING-POINT-OVERFLOW</B></A> ARITHMENTIC-ERROR <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_floa_3.htm#floating-point-underflow"><B>FLOATING-POINT-UNDERFLOW</B></A> (<A REL=DEFINITION HREF="../Body/e_floa_3.htm#floating-point-underflow"><B>FLOATING-POINT-UNDERFLOW</B></A> ARITHMENTIC-ERROR <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_pkg_er.htm#package-error"><B>PACKAGE-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_pkg_er.htm#package-error"><B>PACKAGE-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T) <P>
|
|
<A REL=DEFINITION HREF="../Body/e_parse_.htm#parse-error"><B>PARSE-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_parse_.htm#parse-error"><B>PARSE-ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_stm_er.htm#stream-error"><B>STREAM-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_pr_not.htm#print-not-readable"><B>PRINT-NOT-READABLE</B></A> (<A REL=DEFINITION HREF="../Body/e_pr_not.htm#print-not-readable"><B>PRINT-NOT-READABLE</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> SERIOUS-CONDIITON <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_progra.htm#program-error"><B>PROGRAM-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_progra.htm#program-error"><B>PROGRAM-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> (<A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_smp_cn.htm#simple-condition"><B>SIMPLE-CONDITION</B></A> (<A REL=DEFINITION HREF="../Body/e_smp_cn.htm#simple-condition"><B>SIMPLE-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_smp_er.htm#simple-error"><B>SIMPLE-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_smp_er.htm#simple-error"><B>SIMPLE-ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_smp_cn.htm#simple-condition"><B>SIMPLE-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_smp_tp.htm#simple-type-error"><B>SIMPLE-TYPE-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_smp_tp.htm#simple-type-error"><B>SIMPLE-TYPE-ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_smp_cn.htm#simple-condition"><B>SIMPLE-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_tp_err.htm#type-error"><B>TYPE-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_smp_wa.htm#simple-warning"><B>SIMPLE-WARNING</B></A> (<A REL=DEFINITION HREF="../Body/e_smp_wa.htm#simple-warning"><B>SIMPLE-WARNING</B></A> <A REL=DEFINITION HREF="../Body/e_smp_cn.htm#simple-condition"><B>SIMPLE-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_warnin.htm#warning"><B>WARNING</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_storag.htm#storage-condition"><B>STORAGE-CONDITION</B></A> (<A REL=DEFINITION HREF="../Body/e_storag.htm#storage-condition"><B>STORAGE-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_stm_er.htm#stream-error"><B>STREAM-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_stm_er.htm#stream-error"><B>STREAM-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_style_.htm#style-warning"><B>STYLE-WARNING</B></A> (<A REL=DEFINITION HREF="../Body/e_style_.htm#style-warning"><B>STYLE-WARNING</B></A> <A REL=DEFINITION HREF="../Body/e_warnin.htm#warning"><B>WARNING</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_tp_err.htm#type-error"><B>TYPE-ERROR</B></A> (<A REL=DEFINITION HREF="../Body/e_tp_err.htm#type-error"><B>TYPE-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_unboun.htm#unbound-slot"><B>UNBOUND-SLOT</B></A> (<A REL=DEFINITION HREF="../Body/e_unboun.htm#unbound-slot"><B>UNBOUND-SLOT</B></A> <A REL=DEFINITION HREF="../Body/e_cell_e.htm#cell-error"><B>CELL-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_unbo_1.htm#unbound-variable"><B>UNBOUND-VARIABLE</B></A> (<A REL=DEFINITION HREF="../Body/e_unbo_1.htm#unbound-variable"><B>UNBOUND-VARIABLE</B></A> <A REL=DEFINITION HREF="../Body/e_cell_e.htm#cell-error"><B>CELL-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_undefi.htm#undefined-function"><B>UNDEFINED-FUNCTION</B></A> (<A REL=DEFINITION HREF="../Body/e_undefi.htm#undefined-function"><B>UNDEFINED-FUNCTION</B></A> <A REL=DEFINITION HREF="../Body/e_cell_e.htm#cell-error"><B>CELL-ERROR</B></A> <A REL=DEFINITION HREF="../Body/a_error.htm#error"><B>ERROR</B></A> <A REL=DEFINITION HREF="../Body/e_seriou.htm#serious-condition"><B>SERIOUS-CONDITION</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/e_warnin.htm#warning"><B>WARNING</B></A> (<A REL=DEFINITION HREF="../Body/e_warnin.htm#warning"><B>WARNING</B></A> <A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> T)<P>
|
|
<P>
|
|
3b. Add the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> <A REL=DEFINITION HREF="../Body/t_rst.htm#restart"><B>RESTART</B></A>, with a <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence list of (<A REL=DEFINITION HREF="../Body/t_rst.htm#restart"><B>RESTART</B></A> T).<P>
|
|
<P>
|
|
3c. Add the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> <A REL=DEFINITION HREF="../Body/a_logica.htm#logical-pathname"><B>LOGICAL-PATHNAME</B></A>, with a <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence list of<P>
|
|
(<A REL=DEFINITION HREF="../Body/a_logica.htm#logical-pathname"><B>LOGICAL-PATHNAME</B></A> <A REL=DEFINITION HREF="../Body/a_pn.htm#pathname"><B>PATHNAME</B></A> T).<P>
|
|
<P>
|
|
3d. Add the following classes with the specified <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence lists:<P>
|
|
<A REL=DEFINITION HREF="../Body/t_broadc.htm#broadcast-stream"><B>BROADCAST-STREAM</B></A> (<A REL=DEFINITION HREF="../Body/t_broadc.htm#broadcast-stream"><B>BROADCAST-STREAM</B></A> <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_concat.htm#concatenated-stream"><B>CONCATENATED-STREAM</B></A> (<A REL=DEFINITION HREF="../Body/t_concat.htm#concatenated-stream"><B>CONCATENATED-STREAM</B></A> <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_echo_s.htm#echo-stream"><B>ECHO-STREAM</B></A> (<A REL=DEFINITION HREF="../Body/t_echo_s.htm#echo-stream"><B>ECHO-STREAM</B></A> <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_file_s.htm#file-stream"><B>FILE-STREAM</B></A> (<A REL=DEFINITION HREF="../Body/t_file_s.htm#file-stream"><B>FILE-STREAM</B></A> <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_stg_st.htm#string-stream"><B>STRING-STREAM</B></A> (<A REL=DEFINITION HREF="../Body/t_stg_st.htm#string-stream"><B>STRING-STREAM</B></A> <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_syn_st.htm#synonym-stream"><B>SYNONYM-STREAM</B></A> (<A REL=DEFINITION HREF="../Body/t_syn_st.htm#synonym-stream"><B>SYNONYM-STREAM</B></A> <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_two_wa.htm#two-way-stream"><B>TWO-WAY-STREAM</B></A> (<A REL=DEFINITION HREF="../Body/t_two_wa.htm#two-way-stream"><B>TWO-WAY-STREAM</B></A> <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> T)<P>
|
|
Remove the 23rd bullet from Section 2.2, subsection Type Relationships,<P>
|
|
which lists the above types as being disjoint subtypes of <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A>.<P>
|
|
<P>
|
|
3e. Add the following classes from the CLOS specification, with the specified<P>
|
|
<A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence lists:<P>
|
|
<A REL=DEFINITION HREF="../Body/t_built_.htm#built-in-class"><B>BUILT-IN-CLASS</B></A> (<A REL=DEFINITION HREF="../Body/t_built_.htm#built-in-class"><B>BUILT-IN-CLASS</B></A> <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>CLASS</B></A> <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>CLASS</B></A> (<A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>CLASS</B></A> <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_generi.htm#generic-function"><B>GENERIC-FUNCTION</B></A> (<A REL=DEFINITION HREF="../Body/t_generi.htm#generic-function"><B>GENERIC-FUNCTION</B></A> <A REL=DEFINITION HREF="../Body/a_fn.htm#function"><B>FUNCTION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_method.htm#method"><B>METHOD</B></A> (<A REL=DEFINITION HREF="../Body/t_method.htm#method"><B>METHOD</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/a_method.htm#method-combination"><B>METHOD-COMBINATION</B></A> (<A REL=DEFINITION HREF="../Body/a_method.htm#method-combination"><B>METHOD-COMBINATION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_std_cl.htm#standard-class"><B>STANDARD-CLASS</B></A> (<A REL=DEFINITION HREF="../Body/t_std_cl.htm#standard-class"><B>STANDARD-CLASS</B></A> <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>CLASS</B></A> <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_std_ge.htm#standard-generic-function"><B>STANDARD-GENERIC-FUNCTION</B></A> (<A REL=DEFINITION HREF="../Body/t_std_ge.htm#standard-generic-function"><B>STANDARD-GENERIC-FUNCTION</B></A> <A REL=DEFINITION HREF="../Body/t_generi.htm#generic-function"><B>GENERIC-FUNCTION</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/a_fn.htm#function"><B>FUNCTION</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_std_me.htm#standard-method"><B>STANDARD-METHOD</B></A> (<A REL=DEFINITION HREF="../Body/t_std_me.htm#standard-method"><B>STANDARD-METHOD</B></A> <A REL=DEFINITION HREF="../Body/t_method.htm#method"><B>METHOD</B></A> <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> (<A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_stu_cl.htm#structure-class"><B>STRUCTURE-CLASS</B></A> (<A REL=DEFINITION HREF="../Body/t_stu_cl.htm#structure-class"><B>STRUCTURE-CLASS</B></A> <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>CLASS</B></A> <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_stu_ob.htm#structure-object"><B>STRUCTURE-OBJECT</B></A> (<A REL=DEFINITION HREF="../Body/t_stu_ob.htm#structure-object"><B>STRUCTURE-OBJECT</B></A> T)<P>
|
|
<P>
|
|
4. Allow implementations to modify the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence lists of classes<P>
|
|
which are not specified to include either <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> or <A REL=DEFINITION HREF="../Body/t_stu_ob.htm#structure-object"><B>STRUCTURE-OBJECT</B></A><P>
|
|
to include those classes, placed before the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> T but after all of the<P>
|
|
other specified classes.<P>
|
|
<P>
|
|
Proposal (TYPE-OF-AND-PREDEFINED-CLASSES:FLOAT-SUBCLASSES)<P>
|
|
<P>
|
|
Add the following to TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND:<P>
|
|
<P>
|
|
3f. Add the following subclasses of FLOAT: <A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>,<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A>. It is implementation-defined which among these<P>
|
|
classes are pairwise disjoint. If there are fewer than four internal<P>
|
|
representations for floats, then some of these classes will not have proper<P>
|
|
names. Instead, the rules for handling fewer than four internal<P>
|
|
representations (described in Section 2.2 subsection Data Type Definition) are<P>
|
|
used to determine the principal type name, for which there will be a <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A><P>
|
|
which has a proper name. The other types which share the internal<P>
|
|
representation will all share the principal <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A>. The <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence list<P>
|
|
for the properly named classes are <P>
|
|
<P>
|
|
(<A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<P>
|
|
where '<A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A>' is the name of the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A>. Thus we get the following rules<P>
|
|
to handle a situation where there are fewer than four internal representations<P>
|
|
of floats. <P>
|
|
<P>
|
|
1. If there is only one internal representation for floats, then there is<P>
|
|
one <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A>, named <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>. (<A REL=DEFINITION HREF="../Body/f_find_c.htm#find-class"><B>FIND-CLASS</B></A> <A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A>) returns this <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A><P>
|
|
for all four of the subclasses of <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A>. The <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence list for<P>
|
|
this <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> is (<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T).<P>
|
|
<P>
|
|
2. If there are two internal representations for floats, then they can be<P>
|
|
arranged in either of the following ways: <P>
|
|
<P>
|
|
* Two classes are provided, named <A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> and <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>.<P>
|
|
(<A REL=DEFINITION HREF="../Body/f_find_c.htm#find-class"><B>FIND-CLASS</B></A> <A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A>) returns the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> for any of the<P>
|
|
names <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A>, or <A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A>. The <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence<P>
|
|
lists of these classes are: <P>
|
|
<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<P>
|
|
* Two classes are provided, names <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> and <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A>.<P>
|
|
(<A REL=DEFINITION HREF="../Body/f_find_c.htm#find-class"><B>FIND-CLASS</B></A> <A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A>) returns the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> for either of the<P>
|
|
names <A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> or <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>. (<A REL=DEFINITION HREF="../Body/f_find_c.htm#find-class"><B>FIND-CLASS</B></A> <A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A>) returns the<P>
|
|
<A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> for either of the names <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> or <A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A>.<P>
|
|
The <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence lists for these classes are: <P>
|
|
<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<P>
|
|
3. If there are three internal representations for floats, then they can be<P>
|
|
arranged in either of the following ways:<P>
|
|
<P>
|
|
* Three classes are provided, named <A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>, and<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A>. (<A REL=DEFINITION HREF="../Body/f_find_c.htm#find-class"><B>FIND-CLASS</B></A> <A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A>) returns the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> for<P>
|
|
either of the names <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> or <A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A>. The <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence<P>
|
|
lists for these classes are: <P>
|
|
<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<P>
|
|
* Three classes are provided, named <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A>, and<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A>. (<A REL=DEFINITION HREF="../Body/f_find_c.htm#find-class"><B>FIND-CLASS</B></A> <A REL=DEFINITION HREF="../Body/f_class_.htm#class-name"><B>class-name</B></A>) returns the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> for<P>
|
|
either of the names <A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A> or <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>. The <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence<P>
|
|
lists for these classes are: <P>
|
|
<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A> <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> <A REL=DEFINITION HREF="../Body/t_number.htm#number"><B>NUMBER</B></A> T)<P>
|
|
<P>
|
|
Proposal (<A HREF="iss350_m.htm">TYPE-OF-AND-PREDEFINED-CLASSES:TYPE-OF-HANDLES-FLOATS</A>)<P>
|
|
<P>
|
|
Add the following to TYPE-OF-AND-PREDEFINED-CLASSES:UNIFY-AND-EXTEND:<P>
|
|
<P>
|
|
2c. Add the following additional constraint on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A>.<P>
|
|
<P>
|
|
"For any object for which (<A REL=DEFINITION HREF="../Body/f_typep.htm#typep"><B>TYPEP</B></A> object type) is true when type is one of<P>
|
|
the types <A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A>, or <A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A>, the<P>
|
|
result of <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> is a type specifier for which (<A REL=DEFINITION HREF="../Body/f_subtpp.htm#subtypep"><B>SUBTYPEP</B></A> (<A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> object)<P>
|
|
type) returns T T, i.e, either the type or a subtype of it (a subtype that<P>
|
|
the implementation's <A REL=DEFINITION HREF="../Body/f_subtpp.htm#subtypep"><B>SUBTYPEP</B></A> can recognize)."<P>
|
|
<P>
|
|
<B>Rationale:<P>
|
|
</B><P>
|
|
Changing the list of disjoint types and the first constraint on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> to<P>
|
|
reference the table of predefined classes merges three places with almost<P>
|
|
identical information, resulting in simplification and improved cohesion.<P>
|
|
Note that one effect of this is to remove the subtypes of <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> (<A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A>,<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A>, <A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A>, and <A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A>) from the list of type specifiers<P>
|
|
mentioned in the first constraint on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> (but see the subproposals<P>
|
|
FLOAT-SUBCLASSES and TYPE-OF-HANDLES-FLOATS), and to add the types <A REL=DEFINITION HREF="../Body/a_list.htm#list"><B>LIST</B></A><P>
|
|
(which is <A REL=DEFINITION HREF="../Body/a_not.htm#not"><B>not</B></A> necessary, since <A REL=DEFINITION HREF="../Body/a_cons.htm#cons"><B>CONS</B></A> <A REL=DEFINITION HREF="../Body/a_and.htm#and"><B>and</B></A> <A REL=DEFINITION HREF="../Body/a_null.htm#null"><B>NULL</B></A> form an exhaustive partition of<P>
|
|
<A REL=DEFINITION HREF="../Body/a_list.htm#list"><B>LIST</B></A>) and <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> (which is probably missing due to oversight).<P>
|
|
<P>
|
|
Adding <A REL=DEFINITION HREF="../Body/m_defi_5.htm#define-condition"><B>DEFINE-CONDITION</B></A> to the third bullet brings it <A REL=DEFINITION HREF="../Body/d_inline.htm#inline"><B>inline</B></A> with the intent<P>
|
|
of issue <A HREF="iss049.htm">CLOS-CONDITIONS</A>.<P>
|
|
<P>
|
|
Adding <A REL=DEFINITION HREF="../Body/m_defi_5.htm#define-condition"><B>DEFINE-CONDITION</B></A> and <A REL=DEFINITION HREF="../Body/f_mk_cnd.htm#make-condition"><B>MAKE-CONDITION</B></A> to the fifth constraint brings it<P>
|
|
<A REL=DEFINITION HREF="../Body/d_inline.htm#inline"><B>inline</B></A> with the intent of issue <A HREF="iss049.htm">CLOS-CONDITIONS</A>.<P>
|
|
<P>
|
|
Adding classes for the predefined condition types matches up with the<P>
|
|
disjointness requirements specified by the Condition System, and corresponds<P>
|
|
to the intent of issue <A HREF="iss049.htm">CLOS-CONDITIONS</A>. It could be argued that those two<P>
|
|
places already mandate this addition, but this proposal ensures that we are<P>
|
|
agreed on that.<P>
|
|
<P>
|
|
Adding <A REL=DEFINITION HREF="../Body/t_rst.htm#restart"><B>RESTART</B></A> as a predefined <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> matches up with the disjointness<P>
|
|
requirements specified by the Condition System. It could be argued that<P>
|
|
the Condition System already mandates the addition of this <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A>, but this<P>
|
|
proposal ensures that we are agreed on that.<P>
|
|
<P>
|
|
Adding <A REL=DEFINITION HREF="../Body/a_logica.htm#logical-pathname"><B>LOGICAL-PATHNAME</B></A> as a predefined <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> seems <A REL=DEFINITION HREF="../Body/d_inline.htm#inline"><B>inline</B></A> with the<P>
|
|
expressed intent for making it a type. It is sufficiently new that it may<P>
|
|
simply have not been propagated to all the places that should mention it.<P>
|
|
<P>
|
|
Adding the stream subclasses seems reasonable, since we are already<P>
|
|
requiring them to be disjoint subtypes of <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A>.<P>
|
|
<P>
|
|
Adding the CLOS classes fixes an oversight.<P>
|
|
<P>
|
|
Allowing implementations to add <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A> or <A REL=DEFINITION HREF="../Body/t_stu_ob.htm#structure-object"><B>STRUCTURE-OBJECT</B></A> to the<P>
|
|
<A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence lists allows them to implement any of the predefined classes<P>
|
|
using the <A REL=DEFINITION HREF="../Body/07_ffb.htm#standard"><B>standard</B></A> metaclasses <A REL=DEFINITION HREF="../Body/t_std_cl.htm#standard-class"><B>STANDARD-CLASS</B></A> and <A REL=DEFINITION HREF="../Body/t_stu_cl.htm#structure-class"><B>STRUCTURE-CLASS</B></A>.<P>
|
|
<P>
|
|
The two subproposals, FLOAT-SUBCLASSES and TYPE-OF-HANDLES-FLOATS, are two<P>
|
|
different ways we could undo the removal of the subtypes of <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> from the<P>
|
|
list of types mentioned by the first constraint on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A>.<P>
|
|
<P>
|
|
<B>Current Practice:<P>
|
|
</B><P>
|
|
Up to some "bugs" because they haven't caught up with X3J13 on some of<P>
|
|
these yet, IIM mostly implements this proposal.<P>
|
|
<P>
|
|
Other implementations were not surveyed.<P>
|
|
<P>
|
|
<B>Cost to Implementors:<P>
|
|
</B><P>
|
|
Redirecting the disjointness requirements to reference the list of<P>
|
|
predefined classes and modifying the constraints on <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> primarily<P>
|
|
affects documentation, especially in the writing of the Standard. The<P>
|
|
requirements on implementors are largely unchanged.<P>
|
|
<P>
|
|
The effect of adding the various classes are probably minimal.<P>
|
|
Implementations which already have the <A REL=DEFINITION HREF="../Body/t_stream.htm#stream"><B>STREAM</B></A> subtypes as distinguished<P>
|
|
types can probably easily support them as classes too, since they are<P>
|
|
probably implemented using <A REL=DEFINITION HREF="../Body/m_defstr.htm#defstruct"><B>DEFSTRUCT</B></A>, CLOS, FLAVORS, or some other similar<P>
|
|
mechanism, and making <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> return the right type name in this case is<P>
|
|
probably trivial. Implementations which don't have these stream types<P>
|
|
already have some work to do, and the necessary support for the types will<P>
|
|
probably produce the necessary support for the other stuff. Similarly for<P>
|
|
<A REL=DEFINITION HREF="../Body/e_cnd.htm#condition"><B>CONDITION</B></A> and its subtypes, <A REL=DEFINITION HREF="../Body/a_logica.htm#logical-pathname"><B>LOGICAL-PATHNAME</B></A>, <A REL=DEFINITION HREF="../Body/t_rst.htm#restart"><B>RESTART</B></A>, and the CLOS classes.<P>
|
|
<P>
|
|
<B>Cost to Users:<P>
|
|
</B><P>
|
|
Minimal. Many of the types mentioned here are new. The changes to <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A><P>
|
|
would probably be an improvement for most users.<P>
|
|
<P>
|
|
<B>Benifits:<P>
|
|
</B><P>
|
|
Fewer distributed tables which need to be maintained while writing the<P>
|
|
Standard.<P>
|
|
<P>
|
|
<B>Discussion:<P>
|
|
</B><P>
|
|
An alternative to the unification would be to fix <A REL=DEFINITION HREF="../Body/f_tp_of.htm#type-of"><B>TYPE-OF</B></A> by adding <A REL=DEFINITION HREF="../Body/t_real.htm#real"><B>REAL</B></A> to<P>
|
|
the list of built-in types referenced by the first constraint, to modify the<P>
|
|
fifth constraint to mention <A REL=DEFINITION HREF="../Body/m_defi_5.htm#define-condition"><B>DEFINE-CONDITION</B></A>, and to modify the third bullet<P>
|
|
of the type relationships to also mention <A REL=DEFINITION HREF="../Body/m_defi_5.htm#define-condition"><B>DEFINE-CONDITION</B></A>.<P>
|
|
<P>
|
|
A consequence of this proposal is that the following type names do not have<P>
|
|
associated classes. Perhaps we should add a table to the <A REL=DEFINITION HREF="../Body/07_ffb.htm#standard"><B>standard</B></A> which<P>
|
|
lists these as specifically not required to have associated classes (though<P>
|
|
they may be classes in some implementations).<P>
|
|
<P>
|
|
Subtypes of <A REL=DEFINITION HREF="../Body/t_intege.htm#integer"><B>INTEGER</B></A> Subtypes of <A REL=DEFINITION HREF="../Body/a_ch.htm#character"><B>CHARACTER</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_bignum.htm#bignum"><B>BIGNUM</B></A> BASE-CHARACTER<P>
|
|
<A REL=DEFINITION HREF="../Body/a_bit.htm#bit"><B>BIT</B></A> EXTENDED-CHARACTER<P>
|
|
<A REL=DEFINITION HREF="../Body/t_fixnum.htm#fixnum"><B>FIXNUM</B></A> <A REL=DEFINITION HREF="../Body/t_std_ch.htm#standard-char"><B>STANDARD-CHAR</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_sgn_by.htm#signed-byte"><B>SIGNED-BYTE</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_unsgn_.htm#unsigned-byte"><B>UNSIGNED-BYTE</B></A><P>
|
|
<P>
|
|
Subtypes of <A REL=DEFINITION HREF="../Body/t_array.htm#array"><B>ARRAY</B></A> Subtypes of <A REL=DEFINITION HREF="../Body/a_fn.htm#function"><B>FUNCTION</B></A> Other<P>
|
|
<A REL=DEFINITION HREF="../Body/t_base_s.htm#base-string"><B>BASE-STRING</B></A> <A REL=DEFINITION HREF="../Body/t_cmpd_f.htm#compiled-function"><B>COMPILED-FUNCTION</B></A> <A REL=DEFINITION HREF="../Body/a_atom.htm#atom"><B>ATOM</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_ar.htm#simple-array"><B>SIMPLE-ARRAY</B></A> <A REL=DEFINITION HREF="../Body/a_nil.htm#nil"><B>NIL</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_ba.htm#simple-base-string"><B>SIMPLE-BASE-STRING</B></A> Subtypes of <A REL=DEFINITION HREF="../Body/t_symbol.htm#symbol"><B>SYMBOL</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_bt.htm#simple-bit-vector"><B>SIMPLE-BIT-VECTOR</B></A> <A REL=DEFINITION HREF="../Body/t_kwd.htm#keyword"><B>KEYWORD</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_st.htm#simple-string"><B>SIMPLE-STRING</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_smp_ve.htm#simple-vector"><B>SIMPLE-VECTOR</B></A><P>
|
|
<P>
|
|
Subtypes of <A REL=DEFINITION HREF="../Body/a_float.htm#float"><B>FLOAT</B></A> (if FLOAT-SUBCLASSES is not adopted)<P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#short-float"><B>SHORT-FLOAT</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#single-float"><B>SINGLE-FLOAT</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#double-float"><B>DOUBLE-FLOAT</B></A><P>
|
|
<A REL=DEFINITION HREF="../Body/t_short_.htm#long-float"><B>LONG-FLOAT</B></A><P>
|
|
<P>
|
|
Barrett isn't entirely happy with the <A REL=DEFINITION HREF="../Body/t_class.htm#class"><B>class</B></A> precedence lists specified for<P>
|
|
the CLOS classes. He feels that they might be overly constrained in some<P>
|
|
cases. For example, it should be possible to have an implementation make<P>
|
|
<A REL=DEFINITION HREF="../Body/t_stu_cl.htm#structure-class"><B>STRUCTURE-CLASS</B></A> a trivial subclass of <A REL=DEFINITION HREF="../Body/t_std_cl.htm#standard-class"><B>STANDARD-CLASS</B></A>, define <A REL=DEFINITION HREF="../Body/m_defstr.htm#defstruct"><B>DEFSTRUCT</B></A><P>
|
|
(without the :type option) in terms of <A REL=DEFINITION HREF="../Body/m_defcla.htm#defclass"><B>DEFCLASS</B></A>, and make <A REL=DEFINITION HREF="../Body/t_stu_ob.htm#structure-object"><B>STRUCTURE-OBJECT</B></A> be<P>
|
|
a subclass of <A REL=DEFINITION HREF="../Body/t_std_ob.htm#standard-object"><B>STANDARD-OBJECT</B></A>.<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>
|