$ od -c -N 50000 [eris]<LispCore>CML>DOC>defstruct-design.tedit!1 0000000 S t r u c t u r e s \r T h i s 0000020 d o c u m e n t a t t e m p t 0000040 s t o i d e n t i f y t h 0000060 e i s s u e s i n v o l v e 0000100 d i n i m p l e m e n t i n 0000120 g C o m m o n L i s p s t 0000140 r u c t u r e s a n d ( s e 0000160 c o n d a r i l y ) s u g g e 0000200 s t p o t e n t i a l s o l 0000220 u t i o n s . \r I s s u e s . \r 0000240 T y p i n g : A n y i n s t 0000260 a n c e o f a s t r u c t 0000300 u r e ( t h a t i s : n a 0000320 m e d a n d d o e s n ' t 0000340 s p e c i f y a : t y p e ) 0000360 m u s t r e t u r n t h 0000400 e s t r u c t u r e n a m e 0000420 f r o m t y p e - o f . 0000440 C u r r e n t l y i n I n t 0000460 e r l i s p t h i s i s t 0000500 r u e o n l y o f d a t a 0000520 t y p e s . H o w e v e r 0000540 , t h e r e i s a ( r 0000560 e l a t i v e l y d i f f i c 0000600 u l t t o c h a n g e ) l 0000620 i m i t o f 2 5 5 d a t a 0000640 t y p e s w h i c h i s t 0000660 o o r e s t r i c t i v e l 0000700 i m i t o n t h e n u m b 0000720 e r o f s t r u c t u r e s 0000740 . \r R e p r e s e n t a t i o n 0000760 : A n y r e p r e s e n t 0001000 a t i o n i s s u b j e c t 0001020 t o t h e a b i l i t y 0001040 t o i m p l e m e n t : t y 0001060 p e s p e c i f i c a t i o n 0001100 s ( l e g a l c h o i c e s 0001120 a r e v e c t o r ( s a m 0001140 e a s ( v e c t o r t ) ) 0001160 , ( v e c t o r e l e m e n 0001200 t - t y p e ) , a n d l i s 0001220 t ) . N o t e t h a t s 0001240 p e c i f y i n g : t y p e 0001260 " p r e v e n t s t h e s t 0001300 r u c t u r e n a m e f r o 0001320 m b e c o m i n g a v a l 0001340 i d t y p e s p e c i f i e 0001360 r r e c o g n i z a b l e b 0001400 y t y p e p " . S t r u 0001420 c t u r e s w h o s p e c i 0001440 f y a : t y p e c a n n o 0001460 t : i n c l u d e a s t r 0001500 u c t u r e w i t h a d i 0001520 f f e r e n t : t y p e . 0001540 T h i s m e a n s t h a t 0001560 a c c e s s o r s c a n b e 0001600 i n h e r i t e d f r o m 0001620 a s u p e r t y p e ( t h o 0001640 u g h t h e y w o u l d h 0001660 a v e h a d t o b e p a 0001700 r a m e t e r i s e d t o a 0001720 l l o w f o r : i n c l u d 0001740 e s a n d : i n i t i a l - 0001760 o f f s e t s . ) \r W e m u s 0002000 t c o r r e c t l y h a n d 0002020 l e n o t i n l i n e d e c 0002040 l a r a t i o n s . C u r r 0002060 e n t l y , a l l d a t a t 0002100 y p e o p e r a t i o n s a 0002120 r e i n l i n e . \r D e f a u 0002140 l t i n i t i a l i z a t i o 0002160 n f o r m s a r e t o b 0002200 e e v a l u a t e d i n t 0002220 h e l e x i c a l e n v i r 0002240 o n m e n t o f t h e d e 0002260 f s t r u c t . \r C o m 0002300 m o n L o o p s : D o w e 0002320 w a n t t o c o n s i d e r 0002340 t h e f u t u r e i m p o 0002360 r t a t i o n o f C o m m o 0002400 n L o o p s ? I t h i n k 0002420 t h a t w e m a y b e 0002440 a b l e t o s a v e a l 0002460 o t o f w o r k i n t h 0002500 e f u t u r e b y t h i n 0002520 k i n g a b o u t t h i s 0002540 n o w . \r T y p e c h e c k i n 0002560 g : W h e n a s s i g n i n 0002600 g a t y p e d f i e l d 0002620 i t i s o p t i o n a l w 0002640 h e t h e r o r n o t t o 0002660 t y p e c h e c k t h e n 0002700 e w v a l u e ( o r i n i 0002720 t i a l i z a t i o n f o r m 0002740 ) . W h e n a s s i g n i n 0002760 g a n y f i e l d i t i 0003000 s o p t i o n a l w h e t h 0003020 e r o r n o t t o t y p 0003040 e c h e c k t h e r e c o r 0003060 d i n s t a n c e . \r N o n I 0003100 s s u e s . \r A r e t h e r e 0003120 h i d d e n c o m p l e x i 0003140 t i e s a b o u t : c o n c 0003160 - n a m e , : c o n s t r u c 0003200 t o r , ( s l o t - o p t i o 0003220 n ) : r e a d - o n l y [ 0003240 j u s t v e r i f y t h a t 0003260 a f i e l d i s w r i t 0003300 a b l e b e f o r e g e n e 0003320 r a t i n g t h e a c c e s 0003340 s o r c o d e ] , : p r e 0003360 d i c a t e , : c o n s t r u 0003400 c t o r ? T h e y s e e m 0003420 m o s t l y s t r a i g h t 0003440 f o r w a r d . \r E n v i r o n 0003460 m e n t I s s u e s : \r P r o 0003500 g r a m m i n g t o o l s s 0003520 u c h a s M a s t e r s c o 0003540 p e s h o u l d u n d e r s 0003560 t a n d C L s t r u c t u r 0003600 e s . T h i s i s n o t 0003620 e n t i r e l y s t r a i g 0003640 h t f o r w a r d , s i n c e 0003660 i t m u s t u n d e r s t 0003700 a n d t h e t r a n s i t i 0003720 v e c l o s u r e o f : i 0003740 n c l u d e . ( e . g . t 0003760 o a n s w e r " . w h o 0004000 u s e s f o o a s a f i 0004020 e l d " i t s h o u l d r 0004040 e c o g n i z e n o t j u s 0004060 t u s e s o f B A Z - F O 0004100 O b u t X - F O O f o r 0004120 a l l X t h a t i n c l u 0004140 d e B A Z ( a n d e v e r 0004160 y t h i n g t h a t i n c l 0004200 u d e s X , e t c . ) \r \r I 0004220 I . S o l u t i o n o v e r 0004240 v i e w ( i s s u e s t o 0004260 p a r t s r e l a t i o n s ) 0004300 \r \r T h r e e p o s s i b l e 0004320 w a y s o f d o i n g d 0004340 e f a u l t d e f s t r u c t 0004360 , a s i n ( d e f s t r u 0004400 c t f o o a b c ) . D 0004420 o n ' t j u s t c o u n t 0004440 p r o s & c o n s b e l o 0004460 w : \r \r a ) u s e d a t a t 0004500 y p e s \r \t p r o : a l r e a 0004520 d y i m p l e m e n t e d , 0004540 s o r t o f \r \t \t e f f i c i 0004560 e n t a c c e s s \r \t \t r i g 0004600 h t s e m a n t i c s ( t y 0004620 p e - o f w o r k s ) \r \t \t i 0004640 t s w h a t I n t e r l i s 0004660 p r e c o r d s t u r n i 0004700 n t o \r \t \t o p p o r t u n i t 0004720 y t o g e t r i d o f 0004740 I n t e r l i s p r e c o r d 0004760 s e v e n t u a l l y \r \t c o 0005000 n : d a t a t y p e s d o n 0005020 ' t : i n c l u d e \r \t \t n o 0005040 t e n o u g h d a t a t y p 0005060 e s \r \t \t C M L ' s i m p l 0005100 e m e n t a t i o n i s i n 0005120 c o m p l e t e . \r \r b ) u s 0005140 e s o m e n e w k i n d 0005160 o f n a m e d v e c t o r s 0005200 \r \t c o n : \r \t \t t y p e - o 0005220 f h a s t o r e c o g n i 0005240 z e n a m e d v e c t o r s 0005260 d i f f e r e n t f r o m 0005300 u n n a m e d \r \t \t r e q u i r 0005320 e s g e t t i n g i n t o 0005340 l l h u n k c o d e e t c . 0005360 n e w h u n k t y p e s 0005400 e t c . \r \t \t d o e s n ' t h 0005420 a n d l e p a c k e d s t r 0005440 u c t u r e s w e l l s i n 0005460 c e h u n k s a r e h o m 0005500 o g e n e o u s \r \r c ) u s e 0005520 s o m e v a r i a t i o n 0005540 o n C o m m o n l o o p s 0005560 s c h e m e \r \t c 1 ) u s e 0005600 c o m m o n l o o p s \r \t \t p 0005620 r o : n e a t , f u t u r e 0005640 d i r e c t i o n \r \t \t c o n 0005660 : h o w m u c h o f C o 0005700 m m o n L o o p s n e e d b 0005720 e i m p o r t e d t o u s 0005740 e i t s D E F S T R U C T . 0005760 \t \r \t c 2 ) u s e j u s t 0006000 s m a l l p i e c e o f c 0006020 o m m o n l o o p s , e . g 0006040 . c o m m o n l o o p s c 0006060 o m p a t i b l e b u t n o 0006100 t t h e r e s t o f t h 0006120 e h a i r \r \r I I I . P a r 0006140 t s o f a b o v e o p t i 0006160 o n s . \r \r a ) \r e x t e n d 0006200 d a t a t y p e s . \r \t 1 . 0006220 D e p e n d e n c i e s . \r 0006240 t o a l l o w : i n c l u d 0006260 e i n d a t a t y p e s w 0006300 e r e q u i r e t h e f o 0006320 l l o w i n g m i c r o c o d 0006340 e c h a n g e : \r D T E S T 0006360 w i l l n o w s u c c e e d 0006400 i f t h e i n s t a n c e 0006420 i s a m e m b e r o f 0006440 a s u b t y p e o f t 0006460 h e s p e c i f i e d d a t 0006500 a t y p e . [ t h i s i s 0006520 a l r e a d y p r e s e n t 0006540 i n \ D T E S T . U F N i 0006560 n < l c > n > ] . \r \r T Y P E 0006600 P ( t h e I n t e r l i s p 0006620 - D o p c o d e ) c a n r 0006640 e m a i n i n i t s c u r 0006660 r e n t u s e , s i n c e 0006700 i t i s o n l y s u i t a 0006720 b l e f o r d a t a t y p e 0006740 s w h o s e n u m b e r c 0006760 a n ' t c h a n g e ( h e 0007000 n c e s m a l l d a t a t y 0007020 p e n u m b e r s ) . H o 0007040 w e v e r , w i t h D A T A 0007060 T Y P E S l i k e S T R E A 0007100 M , t h e c o m p i l e r 0007120 a l r e a d y g e n e r a t e 0007140 s D T E S T ' s i n s t e a 0007160 d o f T Y P E P ' s . W 0007200 h y ? \r \r F i e l d a c c 0007220 e s s o r s w i l l b e f 0007240 u n c a l l ' a b l e o b j e 0007260 c t s s p e c i f i e d i n 0007300 t h e d e f i n i t i o n 0007320 c e l l o f t h e a c c e 0007340 s s o r s . \r [ T h i s 0007360 f i e l d s n e e d t o b 0007400 e w o r k e d o u t e x a 0007420 c t l y w i t h J a n t o 0007440 a g r e e w i t h t h e 0007460 a r r a y c o d e ] \r S u g g 0007500 e s t e d f i e l d s f o r 0007520 a n a c c e s s o r a r e 0007540 \r d a t a t y p e \t 1 2 b i t 0007560 s \r e l e m e n t t y p e \t 2 0007600 b i t s \r { b i t d e s c r 0007620 i p t i o n / w o r d l e 0007640 n g t h } \t 8 b i t s \r w o r 0007660 d o f f s e t \t 8 b i t s \0 0007700 \0 \0 \0 \0 005 \0 004 \0 ( \0 $ \0 $ \0 \0 \0 0007720 \0 \0 \0 \0 \0 002 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0007740 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0007760 ( \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 001 \0 0010000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0010020 \0 \0 \0 \0 \0 \0 \0 \0 ( \0 \0 \0 \0 \0 \0 \0 0010040 \0 \0 \0 \0 \0 002 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 0010060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0010100 ( \0 \0 \0 \0 \0 \0 \0 005 \0 \0 \0 \0 002 004 \0 0010120 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0010140 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 004 \0 \b \0 0010160 024 \0 006 M O D E R N \0 \f \0 \0 \0 \0 \0 0010200 \0 \0 \0 \0 023 \0 005 G A C H A \0 \n \0 \0 0010220 \0 \0 \0 \0 \0 \0 \0 030 \0 \n T I M E S R 0010240 O M A N \0 \f \0 \0 \0 \0 \0 \0 \0 \0 \0 026 0010260 \0 \b T E R M I N A L \0 \f \0 \0 \0 \0 0010300 \0 \0 001 \0 \0 026 \0 \b T E R M I N A L 0010320 \0 \f \0 \0 \0 \0 \0 \0 \0 \0 \0 024 \0 006 M O 0010340 D E R N \0 \f \0 \0 \0 \0 \0 \0 002 \0 \0 024 0010360 \0 006 M O D E R N \0 \f \0 \0 \0 \0 \0 \0 0010400 001 \0 \0 024 \0 006 M O D E R N \0 \f \0 \0 0010420 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 \0 004 \0 \0 0010440 \0 \n \0 \0 \0 \0 006 \0 \0 \0 001 \0 \0 \0 \0 \b 0010460 \0 \0 \0 \0 \0 002 \0 004 \0 \0 \0 215 \0 \0 \0 \0 0010500 \b \0 \0 \0 \0 \0 002 \0 004 \0 \0 \0 006 \0 \0 \0 0010520 \0 006 \0 \0 \0 002 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 0010540 002 \0 004 \0 \0 \0 , \0 \0 \0 \0 \b \0 \0 \0 006 0010560 \0 \0 \0 \0 005 \0 \0 \0 030 \0 \0 \0 \0 \b \0 \0 0010600 \0 006 \0 \0 \0 \0 005 \0 \0 \0 & \0 \0 \0 \0 \b 0010620 \0 \0 \0 \a \0 \0 \0 \0 005 \0 \0 \0 305 \0 \0 \0 0010640 \0 \b \0 \0 \0 \0 \0 002 \0 004 \0 \0 \0 K \0 \0 0010660 \0 \0 \b \0 \0 \0 005 \0 \0 \0 \0 005 \0 \0 \0 # 0010700 \0 \0 \0 \0 \b \0 \0 \0 006 \0 \0 \0 \0 005 \0 \0 0010720 \0 \t \0 \0 \0 \0 \b \0 \0 \0 \v \0 \0 \0 \0 005 0010740 \0 \0 \0 003 \0 \0 \0 \0 \b \0 \0 \0 \b \0 \0 \0 0010760 \0 005 \0 \0 \0 \f \0 \0 \0 \0 004 \0 \0 \0 001 \0 0011000 \0 \0 \0 005 \0 \0 \0 006 \0 \0 \0 \0 \b \0 \0 \0 0011020 004 \0 \0 \0 \0 005 \0 \0 \0 031 \0 \0 \0 \0 \b \0 0011040 \0 \0 006 \0 \0 \0 \0 005 \0 \0 \0 R \0 \0 \0 \0 0011060 \b \0 \0 \0 005 \0 \0 \0 \0 005 \0 \0 \0 036 \0 \0 0011100 \0 \0 \b \0 \0 \0 005 \0 \0 \0 \0 005 \0 \0 \0 \b 0011120 \0 \0 \0 \0 \b \0 \0 \0 \b \0 \0 \0 \0 005 \0 \0 0011140 \0 036 \0 \0 \0 \0 \b \0 \0 \0 \b \0 \0 \0 \0 005 0011160 \0 \0 \0 y \0 \0 \0 \0 \b \0 \0 \0 \b \0 \0 \0 0011200 \0 005 \0 \0 \0 006 \0 \0 \0 \0 \b \0 \0 \0 017 \0 0011220 \0 \0 \0 005 \0 \0 \0 004 \0 \0 \0 \0 \b \0 \0 \0 0011240 \0 \0 002 \0 004 \0 \0 \0 031 \0 \0 \0 \0 \b \0 \0 0011260 \0 \t \0 \0 \0 \0 005 \0 \0 \0 > \0 \0 \0 \0 \b 0011300 \0 \0 \0 001 \0 \0 \0 \0 005 \0 \0 \0 \0 \0 002 \0 0011320 004 \0 \0 \0 a \0 \0 \0 \0 \b \0 \0 \0 001 \0 \0 0011340 \0 \0 005 \0 \0 \0 \0 \0 002 \0 004 \0 \0 \0 250 \0 0011360 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 004 \0 \0 \0 214 0011400 \0 \0 \0 \0 \b \0 \0 \0 001 \0 \0 \0 \0 003 \0 \0 0011420 \0 J \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 004 \0 0011440 \0 \0 \t \0 \0 \0 \0 006 \0 \0 \0 002 \0 \0 \0 \0 0011460 \b \0 \0 \0 \0 \0 002 \0 004 \0 \0 \0 $ \0 \0 \0 0011500 \0 \b \0 \0 \0 032 \0 \0 \0 \0 005 \0 \0 \0 016 \0 0011520 \0 \0 \0 \a \0 \0 \0 226 \0 \0 \0 \0 \b \0 \0 \0 0011540 \0 \0 002 \0 004 \0 \0 \0 022 \0 \0 \0 \0 006 \0 \0 0011560 \0 002 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 004 \0 0011600 \0 001 Q \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 004 0011620 \0 \0 \0 001 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 0011640 003 \0 \0 \0 2 \0 \0 \0 \0 006 \0 \0 \0 \0 \0 002 0011660 \0 003 \0 \0 \0 001 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 0011700 002 \0 003 \0 \0 \0 q \0 \0 \0 \0 \b \0 \0 \0 \0 0011720 \0 002 \0 003 \0 \0 \0 001 \0 \0 \0 \0 \b \0 \0 \0 0011740 \0 \0 002 \0 003 \0 \0 \0 021 \0 \0 \0 \0 \b \0 \0 0011760 \0 \0 \0 002 \0 003 \0 \0 \0 # \0 \0 \0 \0 \b \0 0012000 \0 \0 \0 \0 002 \0 003 \0 \0 \0 023 \0 \0 \0 \0 \b 0012020 \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 " \0 \0 \0 \0 0012040 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 ' \0 \0 \0 0012060 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 9 \0 \0 0012100 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 037 \0 0012120 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 030 0012140 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 0012160 & \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 0012200 \0 001 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 0012220 \0 \0 & \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 0012240 \0 \0 \0 \a \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 0012260 003 \0 \0 \0 @ \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 0012300 \0 003 \0 \0 \0 = \0 \0 \0 \0 \b \0 \0 \0 \0 \0 0012320 002 \0 003 \0 \0 \0 D \0 \0 \0 \0 \b \0 \0 \0 \0 0012340 \0 002 \0 003 \0 \0 \0 001 \0 \0 \0 \0 \b \0 \0 \0 0012360 \0 \0 002 \0 003 \0 \0 \0 - \0 \0 \0 \0 \b \0 \0 0012400 \0 \0 \0 002 \0 003 \0 \0 \0 026 \0 \0 \0 \0 \b \0 0012420 \0 \0 \0 \0 002 \0 003 \0 \0 \0 036 \0 \0 \0 \0 \b 0012440 \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 G \0 \0 \0 \0 0012460 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 e \0 \0 \0 0012500 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 001 \0 \0 0012520 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 035 \0 0012540 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 001 0012560 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 \0 0012600 004 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 \0 0012620 \0 022 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 \0 0012640 \0 \0 024 \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 003 0012660 \0 \0 \0 J \0 \0 \0 \0 \b \0 \0 \0 \0 \0 002 \0 0012700 003 \0 \0 \0 221 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 002 0012720 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0012740 002 \0 002 \0 \0 001 \n \0 \0 \0 \0 001 \0 \0 \0 \0 0012760 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 001 \0 \0 \0 0013000 \0 \0 002 \0 002 \0 \0 \0 b \0 \0 \0 \0 001 \0 \0 0013020 \0 \0 \0 002 \0 002 \0 \0 \0 S \0 \0 \0 \0 001 \0 0013040 \0 \0 \0 \0 002 \0 002 \0 \0 \0 % \0 \0 \0 \0 001 0013060 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 021 \0 \0 \0 \0 0013100 001 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 024 \0 \0 \0 0013120 \0 001 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 ' \0 \0 0013140 \0 \0 001 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 022 \0 0013160 \0 \0 \0 001 \0 \0 017 277 \0 237 z 272 0013174