$ od -c -N 50000 [Erinyes]<LispManual>Draft>CHAPSTACK.TXT!1
0000000 \r 1 1 . \t V A R I A B L E
0000020 B I N D I N G S A N D T H E
0000040 I N T E R L I S P S T A C K
0000060 \r \r \r A n u m b e r o f
0000100 s c h e m e s h a v e b e e
0000120 n u s e d i n d i f f e r
0000140 e n t i m p l e m e n t a t i
0000160 o n s o f L i s p f o r
0000200 s t o r i n g t h e v a l u
0000220 e s o f v a r i a b l e s .
0000240 T h e s e i n c l u d e :
0000260 \r \t ( 1 ) \t S t o r i n g v a
0000300 l u e s o n a n a s s o c
0000320 i a t i o n l i s t p a i r
0000340 e d w i t h t h e v a r i
0000360 a b l e n a m e s . \r \t ( 2 )
0000400 \t S t o r i n g v a l u e s
0000420 o n t h e p r o p e r t y
0000440 l i s t o f t h e a t o m
0000460 w h i c h i s t h e n a
0000500 m e o f t h e v a r i a b
0000520 l e . \r \t ( 3 ) \t S t o r i n g
0000540 v a l u e s i n a s p e
0000560 c i a l v a l u e c e l l
0000600 a s s o c i a t e d w i t h
0000620 t h e a t o m n a m e , p
0000640 u t t i n g o l d v a l u e
0000660 s o n a p u s h d o w n
0000700 l i s t , a n d r e s t o r
0000720 i n g t h e s e v a l u e s
0000740 w h e n e x i t i n g f r
0000760 o m a f u n c t i o n . \r \t
0001000 ( 4 ) \t S t o r i n g v a l u
0001020 e s o n a p u s h d o w n
0001040 l i s t . \r I n t e r l i s p
0001060 - 1 0 u s e s t h e t h i
0001100 r d s c h e m e , s o c a
0001120 l l e d " s h a l l o w b i
0001140 n d i n g " . W h e n a
0001160 f u n c t i o n i s e n t e
0001200 r e d , t h e v a l u e o
0001220 f e a c h v a r i a b l e
0001240 b o u n d b y t h e f u n
0001260 c t i o n ( f u n c t i o n
0001300 a r g u m e n t ) i s s t o
0001320 r e d i n a v a l u e c
0001340 e l l a s s o c i a t e d w
0001360 i t h t h a t v a r i a b l
0001400 e n a m e . T h e v a l
0001420 u e t h a t w a s i n t
0001440 h e v a l u e c e l l i s
0001460 s t o r e d i n a b l o
0001500 c k o f s t o r a g e c a
0001520 l l e d t h e b a s i c f
0001540 r a m e f o r t h i s f u
0001560 n c t i o n c a l l . I n
0001600 a d d i t i o n , o n e x
0001620 i t f r o m t h e f u n c
0001640 t i o n e a c h v a r i a b
0001660 l e m u s t b e i n d i v
0001700 i d u a l l y u n b o u n d ;
0001720 t h a t i s , t h e o l
0001740 d v a l u e s a v e d i n
0001760 t h e b a s i c f r a m e
0002000 m u s t b e r e s t o r e
0002020 d t o t h e v a l u e c
0002040 e l l . T h u s t h e r e
0002060 i s a h i g h e r c o s
0002100 t f o r b i n d i n g a n
0002120 d u n b i n d i n g a v a
0002140 r i a b l e t h a n i n t
0002160 h e f o u r t h s c h e m e
0002200 , " d e e p b i n d i n g "
0002220 . H o w e v e r , t o f
0002240 i n d t h e c u r r e n t
0002260 v a l u e o f a n y v a r
0002300 i a b l e , i t i s o n l
0002320 y n e c e s s a r y t o a
0002340 c c e s s t h e v a r i a b
0002360 l e ' s v a l u e c e l l ,
0002400 t h u s m a k i n g v a r
0002420 i a b l e r e f e r e n c e
0002440 c o n s i d e r a b l y c h e
0002460 a p e r u n d e r s h a l l
0002500 o w b i n d i n g t h a n
0002520 u n d e r d e e p b i n d i
0002540 n g , e s p e c i a l l y f
0002560 o r f r e e v a r i a b l e
0002600 s . H o w e v e r , t h e
0002620 s h a l l o w b i n d i n g
0002640 s c h e m e u s e d d o e s
0002660 r e q u i r e a n a d d i
0002700 t i o n a l o v e r h e a d
0002720 i n s w i t c h i n g c o n
0002740 t e x t s w h e n d o i n g
0002760 " s p a g h e t t i s t a c
0003000 k " o p e r a t i o n s . \r
0003020 I n t e r l i s p - D u s e s
0003040 t h e f o r t h s c h e m
0003060 e , " d e e p b i n d i n g
0003100 . " E v e r y t i m e a
0003120 f u n c t i o n i s e n t
0003140 e r e d , a b a s i c f r
0003160 a m e c o n t a i n i n g t
0003200 h e n e w v a r i a b l e s
0003220 i s p u t o n t o p o
0003240 f t h e s t a c k . T h
0003260 e r e f o r e , a n y v a r
0003300 i a b l e r e f e r e n c e
0003320 r e q u i r e s s e a r c h i
0003340 n g t h e s t a c k f o r
0003360 t h e f i r s t i n s t a
0003400 n c e o f t h a t v a r i
0003420 a b l e , w h i c h m a k e
0003440 s f r e e v a r i a b l e
0003460 u s e s o m e w h a t m o r
0003500 e e x p e n s i v e t h a n
0003520 i n a s h a l l o w b i
0003540 n d i n g s c h e m e . O
0003560 n t h e o t h e r h a n d
0003600 , s p a g h e t t i s t a c
0003620 k o p e r a t i o n s a r e
0003640 c o n s i d e r a b l y f a
0003660 s t e r . S o m e o t h e
0003700 r t r i c k s i n v o l v i
0003720 n g c o p y i n g f r e e l
0003740 y - r e f e r e n c e d v a r
0003760 i a b l e s t o h i g h e r
0004000 f r a m e s o n t h e s
0004020 t a c k a r e a l s o u s
0004040 e d t o s p e e d u p t
0004060 h e s e a r c h . \r T h e
0004100 b a s i c f r a m e s a r
0004120 e a l l o c a t e d o n a
0004140 s t a c k o r p u s h d o
0004160 w n l i s t ; f o r m o s
0004200 t u s e r p u r p o s e s ,
0004220 t h e s e f r a m e s s h
0004240 o u l d b e t h o u g h t
0004260 o f a s c o n t a i n i n g
0004300 t h e v a r i a b l e n a
0004320 m e s a s s o c i a t e d w
0004340 i t h t h e f u n c t i o n
0004360 c a l l , a n d t h e c
0004400 u r r e n t v a l u e s f o
0004420 r t h a t f r a m e . T
0004440 h e d e s c r i p t i o n s
0004460 o f t h e s t a c k f u n
0004500 c t i o n s i n b e l o w
0004520 a r e p r e s e n t e d f r
0004540 o m t h i s v i e w p o i n
0004560 t . B o t h i n t e r p r
0004600 e t e d a n d c o m p i l e
0004620 d f u n c t i o n s s t o r
0004640 e b o t h t h e n a m e s
0004660 a n d v a l u e s o f v
0004700 a r i a b l e s s o t h a t
0004720 i n t e r p r e t e d a n d
0004740 c o m p i l e d f u n c t i
0004760 o n s a r e c o m p a t i b
0005000 l e a n d c a n b e f r
0005020 e e l y i n t e r m i x e d ,
0005040 i . e . , f r e e v a r i
0005060 a b l e s c a n b e u s e
0005100 d w i t h n o S P E C V A
0005120 R d e c l a r a t i o n s n
0005140 e c e s s a r y . H o w e v
0005160 e r , i t i s p o s s i b
0005200 l e t o s u p p r e s s s
0005220 t o r i n g o f n a m e s
0005240 i n c o m p i l e d f u n c
0005260 t i o n s , e i t h e r f o
0005300 r e f f i c i e n c y o r
0005320 t o a v o i d a c l a s h
0005340 , v i a a L O C A L V A R
0005360 d e c l a r a t i o n ( s e
0005400 e p a g e X . X X ) . T
0005420 h e n a m e s a r e a l s
0005440 o v e r y u s e f u l i n
0005460 d e b u g g i n g , f o r
0005500 t h e y m a k e p o s s i b
0005520 l e a c o m p l e t e s y
0005540 m b o l i c b a c k t r a c e
0005560 i n c a s e o f e r r o
0005600 r . \r I n a d d i t i o n t
0005620 o t h e b i n d i n g i n
0005640 f o r m a t i o n , a d d i t
0005660 i o n a l i n f o r m a t i o
0005700 n i s a s s o c i a t e d
0005720 w i t h e a c h f u n c t i
0005740 o n c a l l : a c c e s s
0005760 i n f o r m a t i o n i n d i
0006000 c a t i n g t h e p a t h
0006020 t o s e a r c h t h e b a
0006040 s i c f r a m e s f o r v
0006060 a r i a b l e b i n d i n g s
0006100 , c o n t r o l i n f o r m
0006120 a t i o n , a n d t e m p o
0006140 r a r y r e s u l t s a r e
0006160 a l s o s t o r e d o n
0006200 t h e s t a c k i n a b
0006220 l o c k c a l l e d t h e
0006240 f r a m e e x t e n s i o n .
0006260 T h e i n t e r p r e t e
0006300 r a l s o s t o r e s i n
0006320 f o r m a t i o n a b o u t
0006340 p a r t i a l l y e v a l u a
0006360 t e d e x p r e s s i o n s
0006400 a s d e s c r i b e d o n
0006420 p a g e X . X X . \r \r 1 1 . 1
0006440 \t T h e S p a g h e t t i
0006460 S t a c k \r \r T h e B o b r
0006500 o w / W e g b r e i t p a p e
0006520 r , " A M o d e l a n d
0006540 S t a c k I m p l e m e n t a
0006560 t i o n f o r M u l t i p l
0006600 e E n v i r o n m e n t s "
0006620 ( C o m m u n i c a t i o n s
0006640 o f t h e A C M , V o l .
0006660 1 6 , 1 0 , O c t o b e r
0006700 1 9 7 3 . ) , d e s c r i b
0006720 e s a n a c c e s s a n d
0006740 c o n t r o l m e c h a n i
0006760 s m m o r e g e n e r a l
0007000 t h a n t h e s i m p l e
0007020 p u s h d o w n s t a c k .
0007040 T h e a c c e s s a n d
0007060 c o n t r o l m e c h a n i s
0007100 m u s e d b y I n t e r l
0007120 i s p i s a s l i g h t l
0007140 y m o d i f i e d v e r s i
0007160 o n o f t h e o n e p r
0007200 o p o s e d b y B o b r o w
0007220 a n d W e g b r e i t .
0007240 T h i s m e c h a n i s m i
0007260 s c a l l e d t h e " s p
0007300 a g h e t t i s t a c k . " \r
0007320 T h e s p a g h e t t i s y
0007340 s t e m p r e s e n t s t h
0007360 e a c c e s s a n d c o n
0007400 t r o l s t a c k a s a
0007420 d a t a s t r u c t u r e c
0007440 o m p o s e d o f " f r a m
0007460 e s . " T h e f u n c t i o
0007500 n s d e s c r i b e d b e l
0007520 o w o p e r a t e o n t h
0007540 i s s t r u c t u r e .
0007560 T h e s e p r i m i t i v e s
0007600 a l l o w u s e r f u n c
0007620 t i o n s t o m a n i p u l
0007640 a t e t h e s t a c k i n
0007660 a m a c h i n e i n d e p
0007700 e n d e n t w a y . B a c
0007720 k t r a c k i n g , c o r o u
0007740 t i n e s , a n d m o r e
0007760 s o p h i s t i c a t e d c o
0010000 n t r o l s c h e m e s c a
0010020 n b e e a s i l y i m p l
0010040 e m e n t e d w i t h t h e
0010060 s e p r i m i t i v e s . \r T
0010100 h e e v a l u a t i o n o f
0010120 a f u n c t i o n r e q u
0010140 i r e s t h e a l l o c a t
0010160 i o n o f s t o r a g e t
0010200 o h o l d t h e v a l u e
0010220 s o f i t s l o c a l v
0010240 a r i a b l e s d u r i n g
0010260 t h e c o m p u t a t i o n .
0010300 I n a d d i t i o n t
0010320 o v a r i a b l e b i n d i
0010340 n g s , a n a c t i v a t i
0010360 o n o f a f u n c t i o n
0010400 r e q u i r e s a r e t u
0010420 r n l i n k ( i n d i c a t
0010440 i n g w h e r e c o n t r o
0010460 l i s t o g o a f t e r
0010500 t h e c o m p l e t i o n
0010520 o f t h e c o m p u t a t i
0010540 o n ) a n d r o o m f o r
0010560 t e m p o r a r i e s n e e
0010600 d e d d u r i n g t h e c
0010620 o m p u t a t i o n . I n
0010640 t h e s p a g h e t t i s y
0010660 s t e m , o n e " s t a c k
0010700 " i s u s e d f o r s t
0010720 o r i n g a l l t h i s i
0010740 n f o r m a t i o n , b u t
0010760 i t i s b e s t t o v i
0011000 e w t h i s s t a c k a s
0011020 a t r e e o f l i n k e
0011040 d o b j e c t s c a l l e d
0011060 f r a m e e x t e n s i o n
0011100 s ( o r s i m p l y f r a
0011120 m e s ) . \r A f r a m e e x
0011140 t e n s i o n i s a v a r
0011160 i a b l e s i z e d b l o c
0011200 k o f s t o r a g e c o n
0011220 t a i n i n g a f r a m e
0011240 n a m e , a p o i n t e r
0011260 t o s o m e v a r i a b l e
0011300 b i n d i n g s ( t h e B
0011320 L I N K ) , a n d t w o p
0011340 o i n t e r s t o o t h e r
0011360 f r a m e e x t e n s i o n
0011400 s ( t h e A L I N K a n d
0011420 C L I N K ) . I n a d d
0011440 i t i o n t o t h e s e c
0011460 o m p o n e n t s , a f r a
0011500 m e e x t e n s i o n c o n
0011520 t a i n s o t h e r i n f o
0011540 r m a t i o n ( s u c h a s
0011560 t e m p o r a r i e s a n d
0011600 r e f e r e n c e c o u n t
0011620 s ) t h a t d o e s n o t
0011640 i n t e r e s t u s h e r
0011660 e . \r T h e b l o c k o f
0011700 s t o r a g e h o l d i n g
0011720 t h e v a r i a b l e b i n
0011740 d i n g s i s c a l l e d
0011760 a b a s i c f r a m e .
0012000 A b a s i c f r a m e i s
0012020 e s s e n t i a l l y a n
0012040 a r r a y o f p a i r s ,
0012060 e a c h o f w h i c h c o
0012100 n t a i n s a v a r i a b l
0012120 e n a m e a n d i t s v
0012140 a l u e . T h e r e a s o
0012160 n f r a m e e x t e n s i o
0012200 n s p o i n t t o b a s i
0012220 c f r a m e s ( r a t h e r
0012240 t h a n j u s t h a v i n
0012260 g t h e m " b u i l t i n
0012300 " ) i s s o t h a t t w
0012320 o f r a m e e x t e n s i o
0012340 n s c a n s h a r e a c
0012360 o m m o n b a s i c f r a m
0012400 e . T h i s a l l o w s
0012420 t w o p r o c e s s e s t o
0012440 c o m m u n i c a t e v i a
0012460 s h a r e d v a r i a b l e
0012500 b i n d i n g s . \r T h e c
0012520 h a i n o f f r a m e e x
0012540 t e n s i o n s w h i c h c
0012560 a n b e r e a c h e d v i
0012600 a t h e s u c c e s s i v e
0012620 A L I N K s f r o m a g
0012640 i v e n f r a m e i s c a
0012660 l l e d t h e " a c c e s s
0012700 c h a i n " o f t h e f
0012720 r a m e . T h e f i r s t
0012740 f r a m e i n t h e a c
0012760 c e s s c h a i n i s t h
0013000 e s t a r t i n g f r a m e
0013020 . T h e c h a i n t h r
0013040 o u g h s u c c e s s i v e
0013060 C L I N K s i s c a l l e d
0013100 t h e " c o n t r o l c h
0013120 a i n " . \r A f r a m e e x
0013140 t e n s i o n c o m p l e t e
0013160 l y s p e c i f i e s t h e
0013200 v a r i a b l e b i n d i n
0013220 g s a n d c o n t r o l i
0013240 n f o r m a t i o n n e c e s
0013260 s a r y f o r t h e e v a
0013300 l u a t i o n o f a f u n
0013320 c t i o n . W h e n e v e r
0013340 a f u n c t i o n ( o r
0013360 i n f a c t , a n y f o r
0013400 m w h i c h g e n e r a l l
0013420 y b i n d s l o c a l v a
0013440 r i a b l e s ) i s e v a l
0013460 u a t e d , i t i s a s s
0013500 o c i a t e d w i t h s o m
0013520 e f r a m e e x t e n s i o
0013540 n . \r I n t h e b e g i n n
0013560 i n g t h e r e i s p r e
0013600 c i s e l y o n e f r a m e
0013620 e x t e n s i o n i n e x
0013640 i s t e n c e . T h i s i
0013660 s t h e f r a m e i n w
0013700 h i c h t h e t o p - l e v
0013720 e l c a l l t o t h e i
0013740 n t e r p r e t e r i s b e
0013760 i n g r u n . T h i s f
0014000 r a m e i s c a l l e d t
0014020 h e " t o p - l e v e l " f
0014040 r a m e . \r S i n c e p r e c
0014060 i s e l y o n e f u n c t i
0014100 o n i s b e i n g e x e c
0014120 u t e d a t a n y i n s t
0014140 a n t , e x a c t l y o n e
0014160 f r a m e i s d i s t i n
0014200 g u i s h e d a s h a v i n
0014220 g t h e " c o n t r o l b
0014240 u b b l e " i n i t .
0014260 T h i s f r a m e i s c a
0014300 l l e d t h e a c t i v e
0014320 f r a m e . I n i t i a l l
0014340 y , t h e t o p - l e v e l
0014360 f r a m e i s t h e a c
0014400 t i v e f r a m e . I f
0014420 t h e c o m p u t a t i o n
0014440 i n t h e a c t i v e f r
0014460 a m e i n v o k e s a n o t
0014500 h e r f u n c t i o n , a
0014520 n e w b a s i c f r a m e
0014540 a n d f r a m e e x t e n s
0014560 i o n a r e b u i l t .
0014600 T h e f r a m e n a m e o
0014620 f t h i s b a s i c f r a
0014640 m e w i l l b e t h e n
0014660 a m e o f t h e f u n c t
0014700 i o n b e i n g c a l l e d
0014720 . T h e A L I N K , B L
0014740 I N K , a n d C L I N K o
0014760 f t h e n e w f r a m e
0015000 a l l d e p e n d o n p r
0015020 e c i s e l y h o w t h e
0015040 f u n c t i o n i s i n v o
0015060 k e d . T h e n e w f u
0015100 n c t i o n i s t h e n r
0015120 u n i n t h i s n e w f
0015140 r a m e b y p a s s i n g
0015160 c o n t r o l t o t h a t
0015200 f r a m e , i . e . , i t
0015220 i s m a d e t h e a c t i
0015240 v e f r a m e . \r O n c e t
0015260 h e a c t i v e c o m p u t
0015300 a t i o n h a s b e e n c
0015320 o m p l e t e d , c o n t r o
0015340 l n o r m a l l y r e t u r
0015360 n s t o t h e f r a m e
0015400 p o i n t e d t o b y t h
0015420 e C L I N K o f t h e a
0015440 c t i v e f r a m e . T h
0015460 a t i s , t h e f r a m e
0015500 i n t h e C L I N K b e
0015520 c o m e s t h e a c t i v e
0015540 f r a m e . \r I n m o s t
0015560 c a s e s , t h e s t o r a
0015600 g e a s s o c i a t e d w i
0015620 t h t h e b a s i c f r a
0015640 m e a n d f r a m e e x t
0015660 e n s i o n j u s t a b a n
0015700 d o n e d c a n b e r e c
0015720 l a i m e d . H o w e v e r
0015740 , i t i s p o s s i b l e
0015760 t o o b t a i n a p o i
0016000 n t e r t o a f r a m e
0016020 e x t e n s i o n a n d t o
0016040 " h o l d o n " t o t h
0016060 i s f r a m e e v e n a f
0016100 t e r i t h a s b e e n
0016120 e x i t e d . T h i s p o
0016140 i n t e r c a n b e u s e
0016160 d l a t e r t o r u n a
0016200 n o t h e r c o m p u t a t i
0016220 o n i n t h a t e n v i r
0016240 o n m e n t , o r e v e n
0016260 " c o n t i n u e " t h e e
0016300 x i t e d c o m p u t a t i o
0016320 n . \r A s e p a r a t e d a
0016340 t a t y p e , c a l l e d
0016360 a s t a c k p o i n t e r ,
0016400 i s u s e d f o r t h i
0016420 s p u r p o s e . A s t
0016440 a c k p o i n t e r i s j
0016460 u s t a c e l l t h a t
0016500 l i t e r a l l y p o i n t s
0016520 t o a f r a m e e x t e
0016540 n s i o n . S t a c k p o
0016560 i n t e r s p r i n t a s
0016600 # A D R / F R A M E N A M E ,
0016620 e . g . , # 1 , 1 3 6 3 6 /
0016640 C O N D . S t a c k p o i
0016660 n t e r s a r e r e t u r n
0016700 e d b y m a n y o f t h
0016720 e s t a c k m a n i p u l a
0016740 t i n g f u n c t i o n s d
0016760 e s c r i b e d b e l o w .
0017000 E x c e p t f o r c e r t
0017020 a i n a b b r e v i a t i o n
0017040 s ( s u c h a s " t h e
0017060 f r a m e w i t h s u c h -
0017100 a n d - s u c h a n a m e "
0017120 ) , s t a c k p o i n t e r
0017140 s a r e t h e o n l y w
0017160 a y t h e u s e r c a n
0017200 r e f e r e n c e a f r a m
0017220 e e x t e n s i o n . A s
0017240 l o n g a s t h e u s e
0017260 r h a s a s t a c k p o
0017300 i n t e r w h i c h r e f e
0017320 r e n c e s a f r a m e e
0017340 x t e n s i o n , t h a t f
0017360 r a m e e x t e n s i o n (
0017400 a n d a l l t h o s e t h
0017420 a t c a n b e r e a c h e
0017440 d f r o m i t ) w i l l
0017460 n o t b e g a r b a g e c
0017500 o l l e c t e d . \r N o t e t
0017520 h a t t w o s t a c k p o
0017540 i n t e r s r e f e r e n c i
0017560 n g t h e s a m e f r a m
0017600 e e x t e n s i o n a r e
0017620 n o t n e c e s s a r i l y
0017640 E Q , i . e . , ( E Q ( S
0017660 T K P O S ' F O O ) ( S T K
0017700 P O S ' F O O ) ) = N I L .
0017720 H o w e v e r , E Q P c a
0017740 n b e u s e d t o t e s
0017760 t i f t w o d i f f e r e
0020000 n t s t a c k p o i n t e r
0020020 s r e f e r e n c e t h e
0020040 s a m e f r a m e e x t e n
0020060 s i o n ( p a g e X . X X )
0020100 . \r I t i s p o s s i b l e
0020120 t o e v a l u a t e a f
0020140 o r m w i t h r e s p e c t
0020160 t o a n a c c e s s c h
0020200 a i n o t h e r t h a n t
0020220 h e c u r r e n t o n e b
0020240 y u s i n g a s t a c k
0020260 p o i n t e r t o r e f e r
0020300 t o t h e h e a d o f
0020320 t h e a c c e s s c h a i n
0020340 d e s i r e d . N o t e ,
0020360 h o w e v e r , t h a t t
0020400 h i s c a n b e v e r y
0020420 e x p e n s i v e w h e n u
0020440 s i n g a s h a l l o w b
0020460 i n d i n g s c h e m e s u
0020500 c h a s t h a t i n I n
0020520 t e r l i s p - 1 0 . W h e
0020540 n e v a l u a t i n g t h e
0020560 f o r m , s i n c e a l l
0020600 r e f e r e n c e s t o v
0020620 a r i a b l e s u n d e r t
0020640 h e s h a l l o w b i n d i
0020660 n g s c h e m e g o t h r
0020700 o u g h t h e v a r i a b l
0020720 e ' s v a l u e c e l l ,
0020740 t h e v a l u e s i n t h
0020760 e v a l u e c e l l s m u
0021000 s t b e a d j u s t e d t
0021020 o r e f l e c t t h e v a
0021040 l u e s a p p r o p r i a t e
0021060 t o t h e d e s i r e d
0021100 a c c e s s c h a i n . T
0021120 h i s i s d o n e b y c
0021140 h a n g i n g a l l t h e
0021160 b i n d i n g s o n t h e
0021200 c u r r e n t a c c e s s c
0021220 h a i n ( a l l t h e n a
0021240 m e - v a l u e p a i r s )
0021260 s o t h a t t h e y c o n
0021300 t a i n t h e v a l u e c
0021320 u r r e n t a t t h e t i
0021340 m e o f t h e c a l l .
0021360 T h e n a l o n g t h e
0021400 n e w a c c e s s p a t h ,
0021420 a l l b i n d i n g s a r
0021440 e m a d e t o c o n t a i
0021460 n t h e p r e v i o u s v
0021500 a l u e o f t h e v a r i
0021520 a b l e , a n d t h e c u
0021540 r r e n t v a l u e i s p
0021560 l a c e d i n t h e v a l
0021600 u e c e l l . F o r t
0021620 h a t p a r t o f t h e
0021640 a c c e s s p a t h w h i c
0021660 h i s s h a r e d b y t
0021700 h e o l d a n d n e w c
0021720 h a i n , n o w o r k h a
0021740 s t o b e d o n e . T
0021760 h e c o n t e x t s w i t c
0022000 h i n g t i m e , i . e .
0022020 t h e o v e r h e a d i n
0022040 s w i t c h i n g f r o m t
0022060 h e c u r r e n t , a c t i
0022100 v e , a c c e s s c h a i n
0022120 t o a n o t h e r o n e ,
0022140 i s d i r e c t l y p r o
0022160 p o r t i o n a l t o t h e
0022200 s i z e o f t h e t w o
0022220 b r a n c h e s t h a t a
0022240 r e n o t s h a r e d b e
0022260 t w e e n t h e a c c e s s
0022300 c o n t e x t s . T h i s
0022320 c o s t s h o u l d b e
0022340 r e m e m b e r e d i n u s
0022360 i n g g e n e r a t o r s a
0022400 n d c o r o u t i n e s ( p
0022420 a g e X . X X ) . \r \r 1 1 . 2
0022440 \t S t a c k F u n c t i o
0022460 n s \r \r I n t h e d e s c r
0022500 i p t i o n s o f t h e s
0022520 t a c k f u n c t i o n s b
0022540 e l o w , w h e n w e r e
0022560 f e r t o a n a r g u m e
0022600 n t a s a s t a c k d e
0022620 s c r i p t o r , w e m e a
0022640 n t h a t i t i s e i t
0022660 h e r a s t a c k p o i n
0022700 t e r o r o n e o f t h
0022720 e f o l l o w i n g a b b r
0022740 e v i a t i o n s : \r \t N I L \t
0022760 M e a n s t h e a c t i v e
0023000 f r a m e ; t h a t i s ,
0023020 t h e f r a m e o f t h
0023040 e s t a c k f u n c t i o n
0023060 i t s e l f . \r \t T \t M e a n
0023100 s t h e t o p - l e v e l
0023120 f r a m e . \r \t A n y o t h e
0023140 r l i t a t o m \t E q u i v a
0023160 l e n t t o ( S T K P O S
0023200 L I T A T O M - 1 ) . \r \t A
0023220 n u m b e r \t E q u i v a l e n
0023240 t t o ( S T K N T H N U M
0023260 B E R ) . \r I n t h e s t a
0023300 c k f u n c t i o n s d e s
0023320 c r i b e d b e l o w , t h
0023340 e f o l l o w i n g e r r o
0023360 r s c a n o c c u r : T
0023400 h e e r r o r I L L E G A L
0023420 S T A C K A R G o c c u r
0023440 s w h e n a s t a c k d
0023460 e s c r i p t o r i s e x p
0023500 e c t e d a n d t h e s u
0023520 p p l i e d a r g u m e n t
0023540 i s e i t h e r n o t a
0023560 l e g a l s t a c k d e s c
0023600 r i p t o r ( i . e . , n o
0023620 t a s t a c k p o i n t
0023640 e r , l i t a t o m , o r
0023660 n u m b e r ) , o r i s a
0023700 l i t a t o m o r n u m b
0023720 e r f o r w h i c h t h e
0023740 r e i s n o c o r r e s p
0023760 o n d i n g s t a c k f r a
0024000 m e , e . g . , ( S T K N
0024020 T H - 1 ' F O O ) w h e r
0024040 e t h e r e i s n o f r
0024060 a m e n a m e d F O O i n
0024100 t h e a c t i v e c o n t
0024120 r o l c h a i n o r ( S T
0024140 K N T H - 1 0 ' E V A L Q T
0024160 ) . T h e e r r o r S T
0024200 A C K P O I N T E R H A S
0024220 B E E N R E L E A S E D o c
0024240 c u r s w h e n e v e r a
0024260 r e l e a s e d s t a c k p
0024300 o i n t e r i s s u p p l i
0024320 e d a s a s t a c k d e
0024340 s c r i p t o r a r g u m e n
0024360 t f o r a n y p u r p o s
0024400 e o t h e r t h a n a s
0024420 a s t a c k p o i n t e r
0024440 t o r e - u s e . \r N o t e :
0024460 T h e c r e a t i o n o
0024500 f a s i n g l e s t a c k
0024520 p o i n t e r c a n r e s
0024540 u l t i n t h e r e t e n
0024560 t i o n o f a l a r g e
0024600 a m o u n t o f s t a c k
0024620 s p a c e . T h e r e f o r
0024640 e , o n e s h o u l d t r
0024660 y t o r e l e a s e s t a
0024700 c k p o i n t e r s w h e n
0024720 t h e y a r e n o l o n
0024740 g e r n e e d e d . S e e
0024760 p a g e X . X X . \r ( S T K
0025000 P O S F R A M E N A M E N
0025020 P O S O L D P O S ) \t [ F
0025040 u n c t i o n ] \r R e t u r n s
0025060 a s t a c k p o i n t e r
0025100 t o t h e N t h f r a m
0025120 e w i t h f r a m e n a m
0025140 e F R A M E N A M E . T h
0025160 e s e a r c h b e g i n s
0025200 w i t h ( a n d i n c l u d
0025220 e s ) t h e f r a m e s p
0025240 e c i f i e d b y t h e s
0025260 t a c k d e s c r i p t o r
0025300 P O S . T h e s e a r c h
0025320 p r o c e e d s a l o n g
0025340 t h e c o n t r o l c h a i
0025360 n f r o m P O S i f N
0025400 i s n e g a t i v e , o r
0025420 a l o n g t h e a c c e s s
0025440 c h a i n i f N i s p
0025460 o s i t i v e . I f N i
0025500 s N I L , - 1 i s u s e
0025520 d . R e t u r n s a s t
0025540 a c k p o i n t e r t o t
0025560 h e f r a m e i f s u c h
0025600 a f r a m e e x i s t s ,
0025620 o t h e r w i s e r e t u r
0025640 n s N I L . I f O L D P
0025660 O S i s s u p p l i e d a
0025700 n d i s a s t a c k p o
0025720 i n t e r , i t i s r e u
0025740 s e d . I f O L D P O S
0025760 i s s u p p l i e d a n d
0026000 i s a s t a c k p o i n t
0026020 e r a n d S T K P O S r e
0026040 t u r n s N I L , O L D P O
0026060 S i s r e l e a s e d .
0026100 I f O L D P O S i s n o t
0026120 a s t a c k p o i n t e r
0026140 i t i s i g n o r e d . \r
0026160 N o t e : ( S T K P O S '
0026200 S T K P O S ) c a u s e s a
0026220 n e r r o r , I L L E G A L
0026240 S T A C K A R G ; i t i
0026260 s n o t p e r m i s s i b l
0026300 e t o c r e a t e a s t
0026320 a c k p o i n t e r t o t
0026340 h e a c t i v e f r a m e .
0026360 \r \r ( S T K N T H N P O S
0026400 O L D P O S ) \t [ F u n c t
0026420 i o n ] \r R e t u r n s a s
0026440 t a c k p o i n t e r t o
0026460 t h e N t h f r a m e b a
0026500 c k f r o m t h e f r a m
0026520 e s p e c i f i e d b y t
0026540 h e s t a c k d e s c r i p
0026560 t o r P O S . I f N i
0026600 s n e g a t i v e , t h e
0026620 c o n t r o l c h a i n f r
0026640 o m P O S i s f o l l o w
0026660 e d . I f N i s p o s
0026700 i t i v e t h e a c c e s s
0026720 c h a i n i s f o l l o w
0026740 e d . I f N e q u a l s
0026760 0 , S T K N T H r e t u r
0027000 n s a s t a c k p o i n t
0027020 e r t o P O S ( t h i s
0027040 p r o v i d e s a w a y t
0027060 o c o p y a s t a c k p
0027100 o i n t e r ) . R e t u r n
0027120 s N I L i f t h e r e a
0027140 r e f e w e r t h a n N
0027160 f r a m e s i n t h e a p
0027200 p r o p r i a t e c h a i n .
0027220 I f O L D P O S i s s
0027240 u p p l i e d a n d i s a
0027260 s t a c k p o i n t e r ,
0027300 i t i s r e u s e d . I
0027320 f O L D P O S i s n o t
0027340 a s t a c k p o i n t e r
0027360 i t i s i g n o r e d . \r N
0027400 o t e : ( S T K N T H 0 )
0027420 c a u s e s a n e r r o r
0027440 , I L L E G A L S T A C K
0027460 A R G ; i t i s n o t p
0027500 o s s i b l e t o c r e a t
0027520 e a s t a c k p o i n t e
0027540 r t o t h e a c t i v e
0027560 f r a m e . \r \r ( S T K N A M
0027600 E P O S ) \t [ F u n c t i
0027620 o n ] \r R e t u r n s t h e
0027640 f r a m e n a m e o f t h
0027660 e f r a m e s p e c i f i e
0027700 d b y t h e s t a c k d
0027720 e s c r i p t o r P O S . \r \r
0027740 ( S E T S T K N A M E P O S
0027760 N A M E ) \t [ F u n c t i o
0030000 n ] \r C h a n g e s t h e f
0030020 r a m e n a m e o f t h e
0030040 f r a m e s p e c i f i e d
0030060 b y P O S t o b e N A
0030100 M E . R e t u r n s N A M E
0030120 . \r \r ( S T K N T H N A M E N
0030140 P O S ) \t [ F u n c t i o
0030160 n ] \r R e t u r n s t h e f
0030200 r a m e n a m e o f t h e
0030220 N t h f r a m e b a c k
0030240 f r o m P O S . E q u i v
0030260 a l e n t t o ( S T K N A M
0030300 E ( S T K N T H N P O S )
0030320 ) b u t a v o i d s c r e
0030340 a t i o n o f a s t a c k
0030360 p o i n t e r . \r \r I n s u
0030400 m m a r y , S T K P O S c o
0030420 n v e r t s f u n c t i o n
0030440 n a m e s t o s t a c k p
0030460 o i n t e r s , S T K N T H
0030500 c o n v e r t s n u m b e r s
0030520 t o s t a c k p o i n t e
0030540 r s , S T K N A M E c o n v
0030560 e r t s s t a c k p o i n t
0030600 e r s t o f u n c t i o n
0030620 n a m e s , a n d S T K N T
0030640 H N A M E c o n v e r t s n
0030660 u m b e r s t o f u n c t i
0030700 o n n a m e s . \r ( D U M M Y
0030720 F R A M E P P O S ) \t [ F
0030740 u n c t i o n ] \r R e t u r n s
0030760 T i f t h e u s e r n
0031000 e v e r w r o t e a c a l
0031020 l t o t h e f u n c t i o
0031040 n a t P O S , e . g . i
0031060 n I n t e r l i s p - 1 0 ,
0031100 D U M M Y F R A M E P i s T
0031120 f o r * P R O G * L A M ,
0031140 * E N V * , a n d F O O B L
0031160 O C K f r a m e s ( s e e
0031200 b l o c k c o m p i l e r ,
0031220 p a g e X . X X ) . \r \r R E A
0031240 L F R A M E P a n d R E A L
0031260 S T K N T H c a n b e u s
0031300 e d t o w r i t e f u n c
0031320 t i o n s w h i c h m a n i
0031340 p u l a t e t h e s t a c k
0031360 a n d w o r k o n e i t
0031400 h e r i n t e r p r e t e d
0031420 o r c o m p i l e d c o d e
0031440 : \r ( R E A L F R A M E P P O
0031460 S I N T E R P F L G ) \t [
0031500 F u n c t i o n ] \r R e t u r n
0031520 s P O S i f P O S i s
0031540 a " r e a l " f r a m e ,
0031560 i . e . i f P O S i s n
0031600 o t a d u m m y f r a m e
0031620 a n d P O S i s a f r
0031640 a m e t h a t d o e s n o
0031660 t d i s a p p e a r w h e n
0031700 c o m p i l e d ( s u c h
0031720 a s C O N D ) ; o t h e r w
0031740 i s e N I L . I f I N T
0031760 E R P F L G = T , r e t u r n
0032000 s P O S i f P O S i s
0032020 n o t a d u m m y f r a m
0032040 e . F o r e x a m p l e ,
0032060 i f ( S T K N A M E P O S
0032100 ) = C O N D , ( R E A L F R A
0032120 M E P P O S ) i s N I L ,
0032140 b u t ( R E A L F R A M E P
0032160 P O S T ) i s P O S . \r
0032200 \r ( R E A L S T K N T H N P
0032220 O S I N T E R P F L G O L D
0032240 P O S ) \t [ F u n c t i o n
0032260 ] \r R e t u r n s a s t a c
0032300 k p o i n t e r t o t h e
0032320 N t h ( o r - N t h ) f
0032340 r a m e s f o r w h i c h
0032360 ( R E A L F R A M E P P O S
0032400 I N T E R P F L G ) i s P O
0032420 S . \r \r T h e f o l l o w i n
0032440 g f u n c t i o n s a r e
0032460 u s e d f o r a c c e s s i
0032500 n g a n d c h a n g i n g
0032520 b i n d i n g s . S o m e
0032540 o f f u n c t i o n s t a k
0032560 e a n a r g u m e n t , N
0032600 , w h i c h s p e c i f i e
0032620 s a p a r t i c u l a r b
0032640 i n d i n g i n t h e b a
0032660 s i c f r a m e . I f N
0032700 i s a l i t e r a l a t
0032720 o m , i t i s a s s u m e
0032740 d t o b e t h e n a m e
0032760 o f a v a r i a b l e b
0033000 o u n d i n t h e b a s i
0033020 c f r a m e . I f N i
0033040 s a n u m b e r , i t i
0033060 s a s s u m e d t o r e f
0033100 e r e n c e t h e N t h b
0033120 i n d i n g i n t h e b a
0033140 s i c f r a m e . T h e
0033160 f i r s t b i n d i n g i s
0033200 1 . I f t h e b a s i
0033220 c f r a m e c o n t a i n s
0033240 n o b i n d i n g w i t h
0033260 t h e g i v e n n a m e
0033300 o r i f t h e n u m b e r
0033320 i s t o o l a r g e o r
0033340 t o o s m a l l , t h e
0033360 e r r o r I L L E G A L A R
0033400 G o c c u r s . \r ( S T K S C
0033420 A N V A R I P O S O P O S
0033440 ) \t [ F u n c t i o n ] \r S
0033460 e a r c h e s b e g i n n i n
0033500 g a t I P O S f o r a
0033520 f r a m e i n w h i c h a
0033540 v a r i a b l e n a m e d
0033560 V A R i s b o u n d . T h
0033600 e s e a r c h f o l l o w s
0033620 t h e a c c e s s c h a i
0033640 n . R e t u r n s a s t a
0033660 c k p o i n t e r t o t h
0033700 e f r a m e i f f o u n d
0033720 , o t h e r w i s e r e t u
0033740 r n s N I L . I f O P O S
0033760 i s a s t a c k p o i n
0034000 t e r i t i s r e u s e d
0034020 , o t h e r w i s e i t i
0034040 s i g n o r e d . \r \r ( F R A
0034060 M E S C A N A T O M P O S )
0034100 \t [ F u n c t i o n ] \r R e
0034120 t u r n s t h e r e l a t i
0034140 v e p o s i t i o n o f t
0034160 h e b i n d i n g o f A T
0034200 O M i n t h e b a s i c
0034220 f r a m e o f P O S . R
0034240 e t u r n s N I L i f A T
0034260 O M i s n o t f o u n d .
0034300 \r \r ( S T K A R G N P O S
0034320 - - - ) \t [ F u n c t i o n
0034340 ] \r R e t u r n s t h e v a
0034360 l u e o f t h e b i n d i
0034400 n g s p e c i f i e d b y
0034420 N i n t h e b a s i c f
0034440 r a m e o f t h e f r a m
0034460 e s p e c i f i e d b y t
0034500 h e s t a c k d e s c r i p
0034520 t o r P O S . N c a n
0034540 b e a l i t e r a l a t o
0034560 m o r n u m b e r . \r \r ( S
0034600 T K A R G N A M E N P O S )
0034620 \t [ F u n c t i o n ] \r R e
0034640 t u r n s t h e n a m e o
0034660 f t h e b i n d i n g s p
0034700 e c i f i e d b y N , i n
0034720 t h e b a s i c f r a m e
0034740 o f t h e f r a m e s p
0034760 e c i f i e d b y t h e s
0035000 t a c k d e s c r i p t o r
0035020 P O S . N c a n b e a
0035040 l i t e r a l a t o m o r
0035060 n u m b e r . \r \r ( S E T S T K
0035100 A R G N P O S V A L )
0035120 \t [ F u n c t i o n ] \r S e t s
0035140 t h e v a l u e o f t h
0035160 e b i n d i n g s p e c i f
0035200 i e d b y N i n t h e
0035220 b a s i c f r a m e o f t
0035240 h e f r a m e s p e c i f i
0035260 e d b y t h e s t a c k
0035300 d e s c r i p t o r P O S .
0035320 N c a n b e a l i t e
0035340 r a l a t o m o r a n u
0035360 m b e r . R e t u r n s V
0035400 A L . \r \r ( S E T S T K A R G N
0035420 A M E N P O S N A M E )
0035440 \t [ F u n c t i o n ] \r S e t
0035460 s t h e N A M E o f t h
0035500 e b i n d i n g s p e c i f
0035520 i e d b y N i n t h e
0035540 b a s i c f r a m e o f t
0035560 h e f r a m e s p e c i f i
0035600 e d b y t h e s t a c k
0035620 d e s c r i p t o r P O S .
0035640 N c a n b e a l i t e r
0035660 a l a t o m o r a n u m
0035700 b e r . R e t u r n s N A M
0035720 E . \r \r ( S T K N A R G S P O
0035740 S - - - ) \t [ F u n c t i
0035760 o n ] \r R e t u r n s t h e
0036000 n u m b e r o f a r g u m e
0036020 n t s b o u n d i n t h e
0036040 b a s i c f r a m e o f
0036060 t h e f r a m e s p e c i f
0036100 i e d b y t h e s t a c k
0036120 d e s c r i p t o r P O S .
0036140 \r \r ( V A R I A B L E S P O S
0036160 ) \t [ F u n c t i o n ] \r R
0036200 e t u r n s a l i s t o f
0036220 t h e v a r i a b l e s b
0036240 o u n d a t P O S . \r A s
0036260 a n e x a m p l e o f t h
0036300 e u s e o f S T K N A R G
0036320 S a n d S T K A R G N A M E
0036340 , V A R I A B L E S c o u l
0036360 d b e d e f i n e d b y :
0036400 \r ( V A R I A B L E S \r [
0036420 L A M B D A ( P O S ) \r
0036440 ( f o r N f r o m
0036460 1 t o ( S T K N A R G S P
0036500 O S ) \r c o
0036520 l l e c t ( S T K A R G N A M
0036540 E N P O S ] ) \r \r ( S T K A
0036560 R G S P O S - - - ) \t [
0036600 F u n c t i o n ] \r R e t u r n
0036620 s a l i s t o f t h e
0036640 v a l u e s o f v a r i a b
0036660 l e s b o u n d a t P O S
0036700 . \r \r T h e f o l l o w i n g
0036720 f u n c t i o n s a r e u
0036740 s e d t o e v a l u a t e
0036760 a n e x p r e s s i o n i n
0037000 a d i f f e r e n t e n v
0037020 i r o n m e n t , a n d / o r
0037040 t o a l t e r t h e f l
0037060 o w o f c o n t r o l . \r (
0037100 E N V E V A L F O R M A P O
0037120 S C P O S A F L G C F L G
0037140 ) \t [ F u n c t i o n ] \r E
0037160 v a l u a t e s F O R M i n
0037200 t h e e n v i r o n m e n t
0037220 s p e c i f i e d b y A P
0037240 O S a n d C P O S . T h
0037260 a t i s , a n e w a c t
0037300 i v e f r a m e i s c r e
0037320 a t e d w i t h t h e f r
0037340 a m e s p e c i f i e d b y
0037360 t h e s t a c k d e s c r
0037400 i p t o r A P O S a s i t
0037420 s A L I N K , a n d t h e
0037440 f r a m e s p e c i f i e d
0037460 b y t h e s t a c k d e
0037500 s c r i p t o r C P O S a s
0037520 i t s C L I N K . T h e
0037540 n F O R M i s e v a l u a
0037560 t e d . I f A F L G i s
0037600 n o t N I L , a n d A P
0037620 O S i s a s t a c k p o
0037640 i n t e r , t h e n A P O S
0037660 w i l l b e r e l e a s e
0037700 d . S i m i l a r l y , i
0037720 f C F L G i s n o t N I
0037740 L , a n d C P O S i s a
0037760 s t a c k p o i n t e r ,
0040000 t h e n C P O S w i l l b
0040020 e r e l e a s e d . \r \r ( E N
0040040 V A P P L Y F N A R G S A
0040060 P O S C P O S A F L G C F
0040100 L G ) \t [ F u n c t i o n ]
0040120 \r A P P L Y s F N t o A R
0040140 G S i n t h e e n v i r o
0040160 n m e n t s p e c i f i e d
0040200 b y A P O S a n d C P O S
0040220 . A F L G a n d C F L G
0040240 h a v e t h e s a m e i
0040260 n t e r p r e t a t i o n a s
0040300 w i t h E N V E V A L . \r \r
0040320 ( S T K E V A L P O S F O R
0040340 M F L G - - - ) \t [ F u
0040360 n c t i o n ] \r E v a l u a t e
0040400 s F O R M i n t h e a c
0040420 c e s s e n v i r o n m e n t
0040440 o f t h e f r a m e s p
0040460 e c i f i e d b y t h e s
0040500 t a c k d e s c r i p t o r
0040520 P O S . I f F L G i s
0040540 n o t N I L a n d P O S
0040560 i s a s t a c k p o i n t
0040600 e r , r e l e a s e s P O S
0040620 . T h e d e f i n i t i o
0040640 n o f S T K E V A L i s
0040660 ( E N V E V A L F O R M P O
0040700 S N I L F L G ) . \r \r ( S T
0040720 K A P P L Y P O S F N A R
0040740 G S F L G ) \t [ F u n c t
0040760 i o n ] \r S i m i l a r t o
0041000 S T K E V A L b u t a p p l
0041020 i e s F N t o A R G S . \r
0041040 \r ( R E T E V A L P O S F O
0041060 R M F L G - - - ) \t [ F
0041100 u n c t i o n ] \r E v a l u a t
0041120 e s F O R M i n t h e a
0041140 c c e s s e n v i r o n m e n
0041160 t o f t h e f r a m e s
0041200 p e c i f i e d b y t h e
0041220 s t a c k d e s c r i p t o r
0041240 P O S , a n d t h e n r
0041260 e t u r n s f r o m P O S
0041300 w i t h t h a t v a l u e .
0041320 I f F L G i s n o t N
0041340 I L a n d P O S i s a
0041360 s t a c k p o i n t e r , t
0041400 h e n P O S i s r e l e a
0041420 s e d . T h e d e f i n i
0041440 t i o n o f R E T E V A L
0041460 i s e q u i v a l e n t t o
0041500 ( E N V E V A L F O R M P
0041520 O S ( S T K N T H - 1 P O
0041540 S ) F L G T ) , e x c e p
0041560 t t h a t R E T E V A L d
0041600 o e s n o t c r e a t e a
0041620 s t a c k p o i n t e r . \r
0041640 \r ( R E T A P P L Y P O S F
0041660 N A R G S F L G ) \t [ F
0041700 u n c t i o n ] \r S i m i l a r
0041720 t o R E T E V A L e x c e
0041740 p t a p p l i e s F N t o
0041760 A R G S . \r \r ( R E T F R O M
0042000 P O S V A L F L G ) \t
0042020 [ F u n c t i o n ] \r R e t u r
0042040 n f r o m t h e f r a m e
0042060 s p e c i f i e d b y t h
0042100 e s t a c k d e s c r i p t
0042120 o r P O S , w i t h t h e
0042140 v a l u e V A L . I f
0042160 F L G i s n o t N I L ,
0042200 a n d P O S i s a s t a
0042220 c k p o i n t e r , t h e n
0042240 P O S i s r e l e a s e d
0042260 . A n a t t e m p t t o
0042300 R E T F R O M t h e t o p
0042320 l e v e l ( e . g . , (
0042340 R E T F R O M T ) ) c a u s
0042360 e s a n e r r o r , I L L
0042400 E G A L S T A C K A R G .
0042420 R E T F R O M c a n b e w
0042440 r i t t e n i n t e r m s
0042460 o f E N V E V A L a s f o
0042500 l l o w s : \r ( R E T F R O M \r
0042520 ( L A M B D A ( P O S V
0042540 A L F L G ) \r ( E N
0042560 V E V A L ( L I S T ' Q U O
0042600 T E V A L ) \r
0042620 N I L \r
0042640 ( i f ( S T K
0042660 N T H - 1 P O S ( i f F
0042700 L G t h e n P O S ) ) \r
0042720 e
0042740 l s e ( E R R O R X ( L I S
0042760 T 1 9 P O S ) ) ) \r
0043000 N I L \r
0043020 T ) ) )
0043040 \r \r ( R E T T O P O S V A L
0043060 F L G ) \t [ F u n c t i o
0043100 n ] \r L i k e R E T F R O M ,
0043120 e x c e p t r e t u r n s
0043140 t o t h e f r a m e s p e
0043160 c i f i e d b y P O S . \r \r
0043200 ( E V A L V V A R P O S R
0043220 E L F L G ) \t [ F u n c t i
0043240 o n ] \r E v a l u a t e s V A
0043260 R , w h e r e V A R i s
0043300 a s s u m e d t o b e a
0043320 l i t a t o m , i n t h e
0043340 a c c e s s e n v i r o n m e
0043360 n t s p e c i f e d b y t
0043400 h e s t a c k d e s c r i p
0043420 t o r P O S . I f V A R
0043440 i s u n b o u n d , E V A
0043460 L V r e t u r n s N O B I N
0043500 D a n d d o e s n o t g
0043520 e n e r a t e a n e r r o r
0043540 . I f R E L F L G i s n
0043560 o n - N I L a n d P O S i
0043600 s a s t a c k p o i n t e
0043620 r , i t w i l l b e r e
0043640 l e a s e d a f t e r t h e
0043660 v a r i a b l e i s l o o
0043700 k e d u p . W h i l e E
0043720 V A L V c o u l d b e d e
0043740 f i n e d a s ( E N V E V A
0043760 L V A R P O S N I L R E
0044000 L F L G ) i t i s i n f
0044020 a c t s o m e w h a t f a s
0044040 t e r . \r \r T h e f o l l o w
0044060 i n g f u n c t i o n s a n
0044100 d v a r i a b l e s a r e
0044120 u s e d t o m a n i p u l a
0044140 t e s t a c k p o i n t e r
0044160 s . \r ( S T A C K P X ) \t
0044200 [ F u n c t i o n ] \r R e t u r
0044220 n s X i f X i s a s
0044240 t a c k p o i n t e r , o t
0044260 h e r w i s e r e t u r n s
0044300 N I L . \r \r ( R E L S T K P O
0044320 S ) \t [ F u n c t i o n ] \r
0044340 R e l e a s e t h e s t a c
0044360 k p o i n t e r P O S ( s
0044400 e e p a g e X . X X ) .
0044420 I f P O S i s n o t a
0044440 s t a c k p o i n t e r , d
0044460 o e s n o t h i n g . R e
0044500 t u r n s P O S . \r \r ( R E L
0044520 S T K P X ) \t [ F u n c t
0044540 i o n ] \r R e t u r n s T i
0044560 s X i s a r e l e a s e
0044600 d s t a c k p o i n t e r ,
0044620 N I L o t h e r w i s e . \r
0044640 \r ( C L E A R S T K F L G )
0044660 \t [ F u n c t i o n ] \r I f
0044700 F L G i s N I L , r e l e
0044720 a s e s a l l a c t i v e
0044740 s t a c k p o i n t e r s ,
0044760 a n d r e t u r n s N I L .
0045000 I f F L G i s T , r
0045020 e t u r n s a l i s t o f
0045040 a l l t h e a c t i v e
0045060 ( u n r e l e a s e d ) s t a
0045100 c k p o i n t e r s . \r \r C L
0045120 E A R S T K L S T \t [ V a r
0045140 i a b l e ] \r A v a r i a b l
0045160 e u s e d b y t o p - l e
0045200 v e l E V A L Q T . E v e
0045220 r y t i m e E V A L Q T i
0045240 s r e - e n t e r e d ( e .
0045260 g . , f o l l o w i n g e r
0045300 r o r s , o r c o n t r o l
0045320 - D ) , C L E A R S T K L S T
0045340 i s c h e c k e d . I f
0045360 i t s v a l u e i s T ,
0045400 a l l a c t i v e s t a c
0045420 k p o i n t e r s a r e r
0045440 e l e a s e d u s i n g C L
0045460 E A R S T K . I f i t s
0045500 v a l u e i s a l i s t ,
0045520 t h e n a l l s t a c k
0045540 p o i n t e r s o n t h a t
0045560 l i s t a r e r e l e a s
0045600 e d . I f i t s v a l u
0045620 e i s N I L , n o t h i n
0045640 g i s r e l e a s e d .
0045660 C L E A R S T K L S T i s i
0045700 n i t i a l l y T . \r \r N O C
0045720 L E A R S T K L S T \t [ V a
0045740 r i a b l e ] \r A v a r i a b
0045760 l e u s e d b y t o p - l
0046000 e v e l E V A L Q T . I f
0046020 C L E A R S T K L S T i s
0046040 T ( s e e a b o v e ) a l
0046060 l a c t i v e s t a c k p
0046100 o i n t e r s e x c e p t t
0046120 h o s e o n N O C L E A R S
0046140 T K L S T a r e r e l e a s
0046160 e d . N O C L E A R S T K L
0046200 S T i s i n i t i a l l y
0046220 N I L . \r \r T h u s i f
0046240 o n e w i s h e s t o u s
0046260 e m u l t i p l e e n v i r
0046300 o n m e n t s t h a t s u r
0046320 v i v e t h r o u g h c o n
0046340 t r o l - D , e i t h e r C
0046360 L E A R S T K L S T s h o u l
0046400 d b e s e t t o N I L ,
0046420 o r e l s e t h o s e s
0046440 t a c k p o i n t e r s t o
0046460 b e r e t a i n e d s h o
0046500 u l d b e e x p l i c i t l
0046520 y a d d e d t o N O C L E
0046540 A R S T K L S T . \r ( M A P D L
0046560 M A P D L F N M A P D L P O
0046600 S ) \t [ F u n c t i o n ] \r
0046620 S t a r t s a t M A P D L P
0046640 O S a n d a p p l i e s M
0046660 A P D L F N , a f u n c t i
0046700 o n o f t w o a r g u m e
0046720 n t s , t o t h e f u n c
0046740 t i o n n a m e a t e a c
0046760 h f r a m e , a n d t h e
0047000 f r a m e ( s t a c k p o
0047020 i n t e r ) i t s e l f , u
0047040 n t i l t h e t o p o f
0047060 t h e s t a c k i s r e a
0047100 c h e d . R e t u r n s N
0047120 I L . F o r e x a m p l e
0047140 , \r [ M A P D L ( F U N C T I
0047160 O N ( L A M B D A ( X P O
0047200 S ) \r
0047220 ( i f ( I G R E A
0047240 T E R P ( S T K N A R G S P
0047260 O S ) 2 ) \r
0047300 t h e n
0047320 ( P R I N T X ) ] \r w i l l
0047340 p r i n t a l l f u n c t i
0047360 o n s o f m o r e t h a n
0047400 t w o a r g u m e n t s . \r
0047420 \r ( S E A R C H P D L S R C H
0047440 F N S R C H P O S ) \t [ F
0047460 u n c t i o n ] \r S i m i l a r
0047500 t o M A P D L , e x c e p
0047520 t s e a r c h e s t h e p
0047540 u s h d o w n l i s t s t a
0047560 r t i n g a t p o s i t i o
0047600 n S R C H P O S u n t i l
0047620 i t f i n d s a f r a m e
0047640 f o r w h i c h S R C H F
0047660 N , a f u n c t i o n o f
0047700 t w o a r g u m e n t s a
0047720 p p l i e d t o t h e n a
0047740 m e o f t h e f r a m e
0047760 a n d t h e f r a m e i t
0050000 s e l f , i s n o t N I L
0050020 . R e t u r n s ( N A M E
0050040 . F R A M E ) i f s u c
0050060 h a f r a m e i s f o u
0050100 n d , o t h e r w i s e N I
0050120 L . \r \r ( B A C K T R A C E I
0050140 P O S E P O S F L A G S F
0050160 I L E P R I N T F N ) \t [
0050200 F u n c t i o n ] \r P e r f o r
0050220 m s a b a c k t r a c e b
0050240 e g i n n i n g a t t h e
0050260 f r a m e s p e c i f i e d
0050300 b y t h e s t a c k d e s
0050320 c r i p t o r I P O S , a n
0050340 d e n d i n g w i t h t h
0050360 e f r a m e s p e c i f i e
0050400 d b y t h e s t a c k d
0050420 e s c r i p t o r E P O S .
0050440 F L A G S i s a n u m b
0050460 e r i n w h i c h t h e
0050500 o p t i o n s o f t h e B
0050520 A C K T R A C E a r e e n c
0050540 o d e d . I f a b i t
0050560 i s s e t , t h e c o r r
0050600 e s p o n d i n g i n f o r m
0050620 a t i o n i s i n c l u d e
0050640 d i n t h e b a c k t r a
0050660 c e . \r b i t 0 - p r i n
0050700 t a r g u m e n t s o f n
0050720 o n - S U B R s . \r b i t 1
0050740 - p r i n t t e m p o r a r
0050760 i e s o f t h e i n t e r
0051000 p r e t e r . \r b i t 2 -
0051020 p r i n t S U B R a r g u m
0051040 e n t s a n d l o c a l v
0051060 a r i a b l e s . \r b i t 3
0051100 - o m i t p r i n t i n g
0051120 o f U N T R A C E : a n d
0051140 f u n c t i o n n a m e s . \r
0051160 b i t 4 - f o l l o w a
0051200 c c e s s c h a i n i n s t
0051220 e a d o f c o n t r o l c
0051240 h a i n . \r b i t 5 - p r
0051260 i n t t e m p o r a r i e s ,
0051300 i . e . t h e b l i p s .
0051320 \r F o r e x a m p l e : i f
0051340 F L A G S = 4 7 Q , e v e r
0051360 y t h i n g i s p r i n t e
0051400 d ; i f F L A G S = 2 1 Q
0051420 , f o l l o w s t h e a c
0051440 c e s s c h a i n , p r i n
0051460 t s a r g u m e n t s . \r F I
0051500 L E i s t h e f i l e t
0051520 h a t t h e b a c k t r a c
0051540 e i s p r i n t e d t o .
0051560 F I L E m u s t b e o
0051600 p e n . P R I N T F N i s
0051620 u s e d w h e n p r i n t
0051640 i n g t h e v a l u e s o
0051660 f v a r i a b l e s , t e m
0051700 p o r a r i e s , b l i p s ,
0051720 e t c . P R I N T F N = N
0051740 I L d e f a u l t s t o P
0051760 R I N T . \r \r ( B A K T R A C E
0052000 I P O S E P O S S K I P F
0052020 N S F L A G S F I L E )
0052040 \t [ F u n c t i o n ] \r P r i n
0052060 t s a b a c k t r a c e f
0052100 r o m I P O S t o E P O S
0052120 o n t o F I L E . F L A
0052140 G S s p e c i f i e s t h e
0052160 o p t i o n s o f t h e
0052200 b a c k t r a c e , e . g . ,
0052220 d o / d o n ' t p r i n t
0052240 a r g u m e n t s , d o / d o
0052260 n ' t p r i n t t e m p o r
0052300 a r i e s o f t h e i n t
0052320 e r p r e t e r , e t c . ,
0052340 a n d i s t h e s a m e
0052360 a s f o r B A C K T R A C E
0052400 . \r S K I P F N S i s a l
0052420 i s t o f f u n c t i o n s
0052440 . A s B A K T R A C E s
0052460 c a n s d o w n t h e s t
0052500 a c k , t h e s t a c k n
0052520 a m e o f e a c h f r a m
0052540 e i s p a s s e d t o e
0052560 a c h f u n c t i o n i n
0052600 S K I P F N S , a n d i f
0052620 a n y o f t h e m r e t u
0052640 r n n o n - N I L , P O S
0052660 i s s k i p p e d ( i n c l
0052700 u d i n g a l l v a r i a b
0052720 l e s ) . \r B A K T R A C E c
0052740 o l l a p s e s t h e s e q
0052760 u e n c e o f s e v e r a l
0053000 f u n c t i o n c a l l s
0053020 c o r r e s p o n d i n g t o
0053040 a c a l l t o a s y s
0053060 t e m p a c k a g e i n t o
0053100 a s i n g l e " f u n c t
0053120 i o n " u s i n g B A K T R
0053140 A C E L S T a s d e s c r i
0053160 b e d b e l o w . F o r
0053200 e x a m p l e , a n y c a l
0053220 l t o t h e e d i t o r
0053240 i s p r i n t e d a s * *
0053260 E D I T O R * * , a b r e a
0053300 k i s p r i n t e d a s
0053320 * * B R E A K * * , e t c . \r
0053340 B A K T R A C E i s u s e d
0053360 b y t h e B T , B T V ,
0053400 B T V + , B T V * , a n d
0053420 B T V ! c o m m a n d s ,
0053440 w i t h F L A G S = 0 , 1 ,
0053460 5 , 7 , a n d 4 7 Q r
0053500 e s p e c t i v e l y . \r N o t
0053520 e : B A K T R A C E c a l
0053540 l s B A C K T R A C E w i t
0053560 h a P R I N T F N o f S
0053600 H O W P R I N T ( p a g e X
0053620 . X X ) , s o t h a t i f
0053640 S Y S P R E T T Y F L G = T ,
0053660 t h e v a l u e s w i l l
0053700 b e p r e t t y p r i n t e
0053720 d . \r \r B A K T R A C E L S T
0053740 \t [ V a r i a b l e ] \r U s e
0053760 d f o r t e l l i n g B A
0054000 K T R A C E ( t h e r e f o r
0054020 e , t h e B T , B T V ,
0054040 e t c . c o m m a n d s ) t
0054060 o a b b r e v i a t e v a r
0054100 i o u s s e q u e n c e s o
0054120 f f u n c t i o n c a l l s
0054140 o n t h e s t a c k b y
0054160 a s i n g l e k e y , e
0054200 . g . * * B R E A K * * , *
0054220 * E D I T O R * * , e t c . \r
0054240 \r T h e o p e r a t i o n o
0054260 f B A K T R A C E a n d f
0054300 o r m a t o f B A K T R A C
0054320 E L S T i s d e s c r i b e
0054340 d s o t h a t t h e u s
0054360 e r c a n a d d h i s o
0054400 w n e n t r i e s t o B A
0054420 K T R A C E L S T . E a c h
0054440 e n t r y o n B A K T R A
0054460 C E L S T i s a l i s t
0054500 o f t h e f o r m ( F R A
0054520 M E N A M E K E Y . P A T
0054540 T E R N ) o r ( F R A M E N
0054560 A M E ( K E Y 1 . P A T T
0054600 E R N 1 ) . . . ( K E Y N
0054620 . P A T T E R N N ) ) , w h
0054640 e r e a p a t t e r n i s
0054660 a l i s t o f e l e m e
0054700 n t s t h a t a r e e i t
0054720 h e r a t o m s , w h i c h
0054740 m a t c h a s i n g l e
0054760 f r a m e , o r l i s t s ,
0055000 w h i c h a r e i n t e r
0055020 p r e t e d a s a l i s t
0055040 o f a l t e r n a t i v e
0055060 p a t t e r n s , e . g . (
0055100 P R O G N * * B R E A K * *
0055120 E V A L ( ( E R R O R S E T
0055140 B R E A K 1 A B R E A K 1 )
0055160 ( B R E A K 1 ) ) ) \r B A K T R
0055200 A C E o p e r a t e s b y
0055220 s c a n n i n g u p t h e
0055240 s t a c k a n d , a t e a
0055260 c h p o i n t , c o m p a r
0055300 i n g t h e c u r r e n t
0055320 f r a m e n a m e , w i t h
0055340 t h e f r a m e n a m e s
0055360 o n B A K T R A C E L S T ,
0055400 i . e . i t d o e s a n
0055420 A S S O C . I f t h e
0055440 f r a m e n a m e d o e s
0055460 a p p e a r , B A K T R A C E
0055500 a t t e m p t s t o m a t
0055520 c h t h e s t a c k a s
0055540 o f t h a t p o i n t w i
0055560 t h ( o n e o f ) t h e
0055600 p a t t e r n s . I f t h
0055620 e m a t c h i s s u c c e
0055640 s s f u l , B A K T R A C E
0055660 p r i n t s t h e c o r r e
0055700 s p o n d i n g k e y , a n
0055720 d c o n t i n u e s w i t h
0055740 w h e r e t h e m a t c h
0055760 l e f t o f f . I f t
0056000 h e f r a m e n a m e d o
0056020 e s n o t a p p e a r , o
0056040 r t h e m a t c h f a i l
0056060 s , B A K T R A C E s i m p
0056100 l y p r i n t s t h e f r
0056120 a m e n a m e a n d c o n
0056140 t i n u e s w i t h t h e
0056160 n e x t h i g h e r f r a m
0056200 e ( u n l e s s t h e S K
0056220 I P F N S a p p l i e d t o
0056240 t h e f r a m e n a m e
0056260 a r e n o n - N I L a s d
0056300 e s c r i b e d a b o v e ) .
0056320 \r M a t c h i n g i s p e r
0056340 f o r m e d b y c o m p a r
0056360 i n g a t o m s i n t h e
0056400 p a t t e r n w i t h t h
0056420 e c u r r e n t f r a m e
0056440 n a m e , a n d m a t c h i
0056460 n g l i s t s a s p a t t
0056500 e r n s , i . e . s e q u e
0056520 n c e s o f f u n c t i o n
0056540 c a l l s , a l w a y s w
0056560 o r k i n g u p t h e s t
0056600 a c k . F o r e x a m p l
0056620 e , e i t h e r o f t h e
0056640 s e q u e n c e o f f u n
0056660 c t i o n c a l l s " . . .
0056700 B R E A K 1 B R E A K 1 A
0056720 E R R O R S E T E V A L P R
0056740 O G N . . . " o r " . . .
0056760 B R E A K 1 E V A L P R O
0057000 G N . . . " w o u l d m a
0057020 t c h w i t h t h e s a m
0057040 p l e e n t r y g i v e n
0057060 a b o v e , c a u s i n g *
0057100 * B R E A K * * t o b e p
0057120 r i n t e d . \r S p e c i a l
0057140 f e a t u r e s : \r \t 267 \t T h e
0057160 l i t a t o m & c a n b
0057200 e u s e d t o m a t c h
0057220 a n y f r a m e . \r \t 267 \t T h
0057240 e p a t t e r n " - " c a
0057260 n b e u s e d t o m a t
0057300 c h n o t h i n g . - i
0057320 s u s e f u l f o r s p e
0057340 c i f y i n g a n o p t i o
0057360 n a l m a t c h , e . g .
0057400 t h e e x a m p l e a b o v
0057420 e c o u l d a l s o h a v
0057440 e b e e n w r i t t e n a
0057460 s ( P R O G N * * B R E A K
0057500 * * E V A L ( ( E R R O R S
0057520 E T B R E A K 1 A ) - ) B
0057540 R E A K 1 ) . \r \t 267 \t I t i s
0057560 n o t n e c e s s a r y t
0057600 o p r o v i d e i n t h e
0057620 p a t t e r n f o r m a t
0057640 c h i n g d u m m y f r a m
0057660 e s , i . e . f r a m e s
0057700 f o r w h i c h D U M M Y F
0057720 R A M E P ( s e e p a g e
0057740 X . X X ) i s t r u e , e
0057760 . g . i n I n t e r l i s p
0060000 - 1 0 , * P R O G * L A M ,
0060020 * E N V * , N O L I N K D E F
0060040 1 , e t c . W h e n w o
0060060 r k i n g o n a m a t c h
0060100 , t h e m a t c h e r a u
0060120 t o m a t i c a l l y s k i p
0060140 s o v e r t h e s e f r a
0060160 m e s w h e n t h e y d o
0060200 n o t m a t c h . \r \t 267 \t I
0060220 f a m a t c h s u c c e e
0060240 d s a n d t h e K E Y i
0060260 s N I L , n o t h i n g i
0060300 s p r i n t e d . F o r
0060320 e x a m p l e , ( * P R O G *
0060340 L A M N I L E V A L A * E
0060360 N V ) . T h i s s e q u e
0060400 n c e w i l l o c c u r f
0060420 o l l o w i n g a n e r r o
0060440 r w h i c h t h e n c a u
0060460 s e s a b r e a k i f s
0060500 o m e o f t h e f u n c t
0060520 i o n ' s a r g u m e n t s
0060540 a r e L O C A L V A R S . \r \r
0060560 1 1 . 3 \t R e l e a s i n g
0060600 a n d R e u s i n g S t a
0060620 c k P o i n t e r s \r \r T h e
0060640 c r e a t i o n o f a s
0060660 i n g l e s t a c k p o i n
0060700 t e r c a n r e s u l t i
0060720 n t h e r e t e n t i o n
0060740 o f a l a r g e a m o u n
0060760 t o f s t a c k s p a c e
0061000 . F u r t h e r m o r e ,
0061020 t h i s s p a c e w i l l
0061040 n o t b e f r e e d u n t
0061060 i l t h e n e x t g a r b
0061100 a g e c o l l e c t i o n ,
0061120 e v e n i f t h e s t a c
0061140 k p o i n t e r i s n o
0061160 l o n g e r b e i n g u s e
0061200 d , u n l e s s t h e s t
0061220 a c k p o i n t e r i s e
0061240 x p l i c i t l y r e l e a s
0061260 e d o r r e u s e d . I
0061300 f t h e r e i s s u f f i
0061320 c i e n t a m o u n t o f
0061340 s t a c k s p a c e t i e d
0061360 u p i n t h i s f a s h
0061400 i o n , a S T A C K O V E
0061420 R F L O W c o n d i t i o n
0061440 c a n o c c u r , e v e n
0061460 i n t h e s i m p l e s t
0061500 o f c o m p u t a t i o n s .
0061520 F o r t h i s r e a s o
0061540 n , t h e u s e r s h o u
0061560 l d c o n s i d e r r e l e
0061600 a s i n g a s t a c k p o
0061620 i n t e r w h e n t h e e
0061640 n v i r o n m e n t r e f e r
0061660 e n c e d b y t h e s t a
0061700 c k p o i n t e r i s n o
0061720 l o n g e r n e e d e d . \r
0061740 T h e e f f e c t s o f r
0061760 e l e a s i n g a s t a c k
0062000 p o i n t e r a r e : \r ( 1
0062020 ) T h e l i n k b e t w
0062040 e e n t h e s t a c k p o
0062060 i n t e r a n d t h e s t
0062100 a c k i s b r o k e n b y
0062120 s e t t i n g t h e c o n
0062140 t e n t s o f t h e s t a
0062160 c k p o i n t e r t o t h
0062200 e " r e l e a s e d m a r k
0062220 " ( c u r r e n t l y u n b
0062240 o x e d 0 ) . A r e l e
0062260 a s e d s t a c k p o i n t
0062300 e r p r i n t s a s # A D
0062320 R / # 0 . \r ( 2 ) I f t h
0062340 i s s t a c k p o i n t e r
0062360 w a s t h e l a s t r e
0062400 m a i n i n g r e f e r e n c
0062420 e t o a f r a m e e x t
0062440 e n s i o n ; t h a t i s ,
0062460 i f n o o t h e r s t a
0062500 c k p o i n t e r r e f e r
0062520 e n c e s t h e f r a m e
0062540 e x t e n s i o n a n d t h
0062560 e e x t e n s i o n i s n
0062600 o t c o n t a i n e d i n
0062620 t h e a c t i v e c o n t r
0062640 o l o r a c c e s s c h a
0062660 i n , t h e n t h e e x t
0062700 e n s i o n m a y b e r e
0062720 c l a i m e d , a n d i s
0062740 r e c l a i m e d i m m e d i
0062760 a t e l y . T h e p r o c
0063000 e s s r e p e a t s f o r
0063020 t h e a c c e s s a n d c
0063040 o n t r o l c h a i n s o f
0063060 t h e r e c l a i m e d e
0063100 x t e n s i o n s o t h a t
0063120 a l l s t a c k s p a c e
0063140 t h a t w a s r e a c h a
0063160 b l e o n l y f r o m t h
0063200 e r e l e a s e d s t a c k
0063220 p o i n t e r i s r e c l
0063240 a i m e d . \r A s t a c k p
0063260 o i n t e r m a y b e r e
0063300 l e a s e d u s i n g t h e
0063320 f u n c t i o n R E L S T K
0063340 , b u t t h e r e a r e
0063360 s o m e c a s e s f o r w
0063400 h i c h R E L S T K i s n
0063420 o t s u f f i c i e n t .
0063440 F o r e x a m p l e , i f
0063460 a f u n c t i o n c o n t a
0063500 i n s a c a l l t o R E
0063520 T F R O M i n w h i c h a
0063540 s t a c k p o i n t e r w
0063560 a s u s e d t o s p e c i
0063600 f y w h e r e t o r e t u
0063620 r n t o , i t w o u l d
0063640 n o t b e p o s s i b l e
0063660 t o s i m u l t a n e o u s l
0063700 y r e l e a s e t h e s t
0063720 a c k p o i n t e r . ( A
0063740 R E L S T K a p p e a r i n
0063760 g i n t h e f u n c t i o
0064000 n f o l l o w i n g t h e
0064020 c a l l t o R E T F R O M
0064040 w o u l d n o t b e e x e
0064060 c u t e d ! ) T o p e r m i
0064100 t r e l e a s e o f a s
0064120 t a c k p o i n t e r i n
0064140 t h i s s i t u a t i o n ,
0064160 t h e s t a c k f u n c t i
0064200 o n s t h a t r e l i n q u
0064220 i s h c o n t r o l h a v e
0064240 o p t i o n a l f l a g a
0064260 r g u m e n t s t o d e n o
0064300 t e w h e t h e r o r n o
0064320 t a s t a c k p o i n t e
0064340 r i s t o b e r e l e a
0064360 s e d ( A F L G a n d C F
0064400 L G ) . N o t e t h a t i
0064420 n t h i s c a s e r e l e
0064440 a s i n g t h e s t a c k
0064460 p o i n t e r w i l l n o t
0064500 c a u s e t h e s t a c k
0064520 s p a c e t o b e r e c
0064540 l a i m e d i m m e d i a t e
0064560 l y b e c a u s e t h e f
0064600 r a m e r e f e r e n c e d
0064620 b y t h e s t a c k p o i
0064640 n t e r w i l l h a v e b
0064660 e c o m e p a r t o f t h
0064700 e a c t i v e e n v i r o n
0064720 m e n t . \r A n o t h e r w a
0064740 y o f a v o i d i n g c r
0064760 e a t i n g n e w s t a c k
0065000 p o i n t e r s i s t o
0065020 r e u s e s t a c k p o i n
0065040 t e r s t h a t a r e n o
0065060 l o n g e r n e e d e d .
0065100 T h e s t a c k f u n c t
0065120 i o n s t h a t c r e a t e
0065140 s t a c k p o i n t e r s
0065160 ( S T K P O S , S T K N T H ,
0065200 a n d S T K S C A N ) h a
0065220 v e a n o p t i o n a l a
0065240 r g u m e n t w h i c h i s
0065260 a s t a c k p o i n t e r
0065300 t o r e u s e . W h e n
0065320 a s t a c k p o i n t e r
0065340 i s r e u s e d , t w o
0065360 t h i n g s h a p p e n .
0065400 F i r s t t h e s t a c k
0065420 p o i n t e r i s r e l e
0065440 a s e d ( s e e a b o v e )
0065460 . T h e n t h e p o i n
0065500 t e r t o t h e n e w f
0065520 r a m e e x t e n s i o n i
0065540 s d e p o s i t e d i n t
0065560 h e s t a c k p o i n t e r
0065600 . T h e o l d s t a c
0065620 k p o i n t e r ( w i t h
0065640 i t s n e w c o n t e n t s
0065660 ) i s t h e v a l u e o
0065700 f t h e f u n c t i o n .
0065720 N o t e t h a t t h e r
0065740 e u s e d s t a c k p o i n
0065760 t e r w i l l b e r e l e
0066000 a s e d e v e n i f t h e
0066020 f u n c t i o n d o e s n
0066040 o t f i n d t h e s p e c
0066060 i f i e d f r a m e . \r N o t
0066100 e t h a t e v e n i f s
0066120 t a c k p o i n t e r s a r
0066140 e e x p l i c i t l y b e i
0066160 n g r e l e a s e d , c r e
0066200 a t i o n o f m a n y s t
0066220 a c k p o i n t e r s c a n
0066240 c a u s e a g a r b a g e
0066260 c o l l e c t i o n o f s
0066300 t a c k p o i n t e r s p a
0066320 c e . T h u s , i f t h e
0066340 u s e r ' s a p p l i c a t
0066360 i o n r e q u i r e s c r e
0066400 a t i n g m a n y s t a c k
0066420 p o i n t e r s , h e d e
0066440 f i n i t e l y s h o u l d
0066460 t a k e a d v a n t a g e o
0066500 f r e u s i n g s t a c k
0066520 p o i n t e r s . \r \r 1 1 . 4
0066540 \t T h e P u s h - D o w n
0066560 L i s t a n d t h e I n t
0066600 e r p r e t e r \r \r I n a d d
0066620 i t i o n t o t h e n a m
0066640 e s a n d v a l u e s o f
0066660 a r g u m e n t s f o r f
0066700 u n c t i o n s , i n f o r m
0066720 a t i o n r e g a r d i n g
0066740 p a r t i a l l y - e v a l u a
0066760 t e d e x p r e s s i o n s
0067000 i s k e p t o n t h e p
0067020 u s h - d o w n l i s t .
0067040 F o r e x a m p l e , c o n
0067060 s i d e r t h e f o l l o w
0067100 i n g d e f i n i t i o n o
0067120 f t h e f u n c t i o n F
0067140 A C T ( i n t e n t i o n a l
0067160 l y f a u l t y ) : \r ( F A C
0067200 T \r [ L A M B D A ( N )
0067220 \r ( C O N D \r
0067240 ( ( Z E R O P N )
0067260 \r L ) \r
0067300 ( T ( I T I M
0067320 E S N ( F A C T ( S U B 1
0067340 N ] ) \r I n e v a l u a t i
0067360 n g t h e f o r m ( F A C
0067400 T 1 ) , a s s o o n a s
0067420 F A C T i s e n t e r e d
0067440 , t h e i n t e r p r e t e
0067460 r b e g i n s e v a l u a t
0067500 i n g t h e i m p l i c i t
0067520 P R O G N f o l l o w i n g
0067540 t h e L A M B D A . T h
0067560 e f i r s t f u n c t i o n
0067600 e n t e r e d i n t h i s
0067620 p r o c e s s i s C O N D
0067640 . C O N D b e g i n s t
0067660 o p r o c e s s i t s l i
0067700 s t o f c l a u s e s .
0067720 A f t e r c a l l i n g Z E
0067740 R O P a n d g e t t i n g
0067760 a N I L v a l u e , C O N
0070000 D p r o c e e d s t o t h
0070020 e n e x t c l a u s e a n
0070040 d e v a l u a t e s T .
0070060 S i n c e T i s t r u e ,
0070100 t h e e v a l u a t i o n
0070120 o f t h e i m p l i c i t
0070140 P R O G N t h a t i s t h
0070160 e c o n s e q u e n t o f
0070200 t h e T c l a u s e i s
0070220 b e g u n . T h i s r e q
0070240 u i r e s c a l l i n g t h
0070260 e f u n c t i o n I T I M E
0070300 S . H o w e v e r b e f o
0070320 r e I T I M E S c a n b e
0070340 c a l l e d , i t s a r g
0070360 u m e n t s m u s t b e e
0070400 v a l u a t e d . T h e f
0070420 i r s t a r g u m e n t i s
0070440 e v a l u a t e d b y r e
0070460 t r i e v i n g t h e c u r
0070500 r e n t b i n d i n g o f
0070520 N f r o m i t s v a l u e
0070540 c e l l ; t h e s e c o n
0070560 d i n v o l v e s a r e c
0070600 u r s i v e c a l l t o F
0070620 A C T , a n d a n o t h e r
0070640 i m p l i c i t P R O G N ,
0070660 e t c . \r N o t e t h a t
0070700 a t e a c h s t a g e o f
0070720 t h i s p r o c e s s , s
0070740 o m e p o r t i o n o f a
0070760 n e x p r e s s i o n h a s
0071000 b e e n e v a l u a t e d ,
0071020 a n d a n o t h e r i s
0071040 a w a i t i n g e v a l u a t
0071060 i o n . T h e o u t p u t
0071100 b e l o w ( f r o m I n t
0071120 e r l i s p - 1 0 ) i l l u s
0071140 t r a t e s t h i s b y s
0071160 h o w i n g t h e s t a t e
0071200 o f t h e p u s h - d o w
0071220 n l i s t a t t h e p o
0071240 i n t i n t h e c o m p u
0071260 t a t i o n o f ( F A C T
0071300 1 ) w h e n t h e u n b o
0071320 u n d a t o m L i s r e
0071340 a c h e d . \r _ F A C T ( 1 ) \r
0071360 u . b . a . L { i n F A C
0071400 T } i n ( ( Z E R O P N )
0071420 L ) \r ( L b r o k e n ) \r :
0071440 B T V ! \r \r * T A I L *
0071460 ( L ) \r \r * A R G 1 ( (
0071500 ( Z E R O P N ) L ) ( T
0071520 ( I T I M E S N ( F A C T
0071540 ( S U B 1 N ) ) ) ) ) \r C O N
0071560 D \r \r * F O R M * ( C O
0071600 N D ( ( Z E R O P N ) L )
0071620 ( T ( I T I M E S N ( F
0071640 A C T ( S U B 1 N ) ) ) ) )
0071660 \r * T A I L * ( ( C O N
0071700 D ( ( Z E R O P N ) L )
0071720 ( T ( I T I M E S N ( F A
0071740 C T ( S U B 1 N ) ) ) ) ) )
0071760 \r \r N 0 \r F A C T \r \r \r
0072000 * F O R M * ( F A C T
0072020 ( S U B 1 N ) ) \r * F N
0072040 * I T I M E S \r * T A I
0072060 L * ( ( F A C T ( S U B 1
0072100 N ) ) ) \r * A R G V A L *
0072120 1 \r * F O R M * ( I T
0072140 I M E S N ( F A C T ( S U
0072160 B 1 N ) ) ) \r * T A I L
0072200 * ( ( I T I M E S N ( F A
0072220 C T ( S U B 1 N ) ) ) ) \r \r
0072240 * A R G 1 ( ( ( Z E R O
0072260 P N ) L ) ( T ( I T I M
0072300 E S N ( F A C T ( S U B 1
0072320 N ) ) ) ) ) \r C O N D \r \r
0072340 * F O R M * ( C O N D ( (
0072360 Z E R O P N ) L ) ( T (
0072400 I T I M E S N ( F A C T (
0072420 S U B 1 N ) ) ) ) ) \r *
0072440 T A I L * ( ( C O N D ( ( Z
0072460 E R O P N ) L ) ( T ( I
0072500 T I M E S N ( F A C T ( S
0072520 U B 1 N ) ) ) ) ) ) \r \r
0072540 N 1 \r F A C T \r \r * * T O P *
0072560 * \r I n t e r n a l c a l l s
0072600 t o E V A L , e . g . ,
0072620 f r o m C O N D a n d t h
0072640 e i n t e r p r e t e r , a
0072660 r e m a r k e d o n t h e
0072700 p u s h - d o w n l i s t
0072720 b y a s p e c i a l m a r
0072740 k o r b l i p w h i c h
0072760 t h e b a c k t r a c e p r
0073000 i n t s a s * F O R M * .
0073020 T h e g e n e a l o g y o
0073040 f * F O R M * ' s i s t h
0073060 u s a h i s t o r y o f
0073100 t h e c o m p u t a t i o n .
0073120 O t h e r t e m p o r a r
0073140 y i n f o r m a t i o n s t
0073160 o r e d o n t h e s t a c
0073200 k b y t h e i n t e r p r
0073220 e t e r i n c l u d e s t h
0073240 e t a i l o f a p a r t
0073260 i a l l y e v a l u a t e d
0073300 i m p l i c i t P R O G N (
0073320 e . g . , a c o n d c l a
0073340 u s e o r l a m b d a e x
0073360 p r e s s i o n ) a n d t h
0073400 e t a i l o f a p a r t
0073420 i a l l y e v a l u a t e d
0073440 f o r m ( i . e . , t h o s
0073460 e a r g u m e n t s n o t
0073500 y e t e v a l u a t e d ) ,
0073520 b o t h i n d i c a t e d o
0073540 n t h e b a c k t r a c e
0073560 b y * T A I L * , t h e v
0073600 a l u e s o f a r g u m e n
0073620 t s t h a t h a v e a l r
0073640 e a d y b e e n e v a l u a
0073660 t e d , i n d i c a t e d b
0073700 y * A R G V A L * , a n d
0073720 t h e n a m e s o f f u n
0073740 c t i o n s w a i t i n g t
0073760 o b e c a l l e d , i n d
0074000 i c a t e d b y * F N * .
0074020 * A R G 1 , . . . , * A R
0074040 G n a r e u s e d b y t
0074060 h e b a c k t r a c e t o
0074100 i n d i c a t e t h e ( u n
0074120 n a m e d ) a r g u m e n t s
0074140 t o S U B R s . \r N o t e
0074160 t h a t a f u n c t i o n
0074200 i s n o t a c t u a l l y
0074220 e n t e r e d a n d d o e s
0074240 n o t a p p e a r o n t
0074260 h e s t a c k , u n t i l
0074300 i t s a r g u m e n t s h a
0074320 v e b e e n e v a l u a t e
0074340 d ( e x c e p t f o r n l
0074360 a m b d a f u n c t i o n s ,
0074400 o f c o u r s e ) . A l
0074420 s o n o t e t h a t t h e
0074440 * A R G 1 , * F O R M * ,
0074460 * T A I L * , e t c . " b i
0074500 n d i n g s " c o m p r i s e
0074520 t h e a c t u a l w o r k
0074540 i n g s t o r a g e . I n
0074560 o t h e r w o r d s , i n
0074600 t h e a b o v e e x a m p
0074620 l e , i f a ( l o w e r )
0074640 f u n c t i o n c h a n g e
0074660 d t h e v a l u e o f t
0074700 h e * A R G 1 b i n d i n g
0074720 , t h e C O N D w o u l d
0074740 c o n t i n u e i n t e r p
0074760 r e t i n g t h e n e w b
0075000 i n d i n g a s a l i s t
0075020 o f C O N D c l a u s e s
0075040 . S i m i l a r l y , i f
0075060 t h e * A R G V A L * b i
0075100 n d i n g w e r e c h a n g
0075120 e d , t h e n e w v a l u
0075140 e w o u l d b e g i v e n
0075160 t o I T I M E S a s i t
0075200 s f i r s t a r g u m e n t
0075220 a f t e r i t s s e c o n
0075240 d a r g u m e n t h a d b
0075260 e e n e v a l u a t e d , a
0075300 n d I T I M E S w a s a c
0075320 t u a l l y c a l l e d . \r N
0075340 o t e t h a t * F O R M * ,
0075360 * T A I L * , * A R G V A L
0075400 * , e t c . , d o n o t
0075420 a c t u a l l y a p p e a r
0075440 a s v a r i a b l e s o n
0075460 t h e s t a c k , i . e . ,
0075500 e v a l u a t i n g * F O R
0075520 M * o r c a l l i n g S T
0075540 K S C A N t o s e a r c h
0075560 f o r i t w i l l n o t
0075600 w o r k . H o w e v e r ,
0075620 t h e f u n c t i o n s B L
0075640 I P V A L , S E T B L I P V A
0075660 L , a n d B L I P S C A N
0075700 d e s c r i b e d b e l o w
0075720 a r e a v a i l a b l e f o
0075740 r a c c e s s i n g t h e s
0075760 e i n t e r n a l b l i p s
0076000 . T h e s e f u n c t i o
0076020 n s c u r r e n t l y k n o
0076040 w a b o u t f o u r d i f
0076060 f e r e n t t y p e s o f
0076100 b l i p s : \r \t * F N * \t t h e
0076120 n a m e o f a f u n c t
0076140 i o n a b o u t t o b e
0076160 c a l l e d \r \t * A R G V A L *
0076200 \t a n a r g u m e n t f o r
0076220 a f u n c t i o n a b o u
0076240 t t o b e c a l l e d \r \t
0076260 * F O R M * \t a f o r m i n
0076300 t h e p r o c e s s o f
0076320 e v a l u a t i o n \r \t * T A I
0076340 L * \t t h e t a i l o f a
0076360 C O N D c l a u s e , i m
0076400 p l i c i t P R O G N , P R
0076420 O G , e t c . \r ( B L I P V A
0076440 L B L I P T Y P I P O S F
0076460 L G ) \t [ F u n c t i o n ]
0076500 \r R e t u r n s t h e v a l
0076520 u e o f t h e s p e c i f
0076540 i e d b l i p o f t y p e
0076560 B L I P T Y P . I f F L
0076600 G i s a n u m b e r N ,
0076620 f i n d s t h e N t h b
0076640 l i p o f t h e d e s i r
0076660 e d t y p e , s e a r c h i
0076700 n g t h e c o n t r o l c
0076720 h a i n b e g i n n i n g a
0076740 t t h e f r a m e s p e c
0076760 i f i e d b y t h e s t a
0077000 c k d e s c r i p t o r I P
0077020 O S . I f F L G i s N
0077040 I L , 1 i s u s e d .
0077060 I f F L G i s T , r e t
0077100 u r n s t h e n u m b e r
0077120 o f b l i p s o f t h e
0077140 s p e c i f i e d t y p e a
0077160 t I P O S . \r \r ( S E T B L I
0077200 P V A L B L I P T Y P I P O
0077220 S N V A L ) \t [ F u n c
0077240 t i o n ] \r S e t s t h e v
0077260 a l u e o f t h e s p e c
0077300 i f i e d b l i p o f t y
0077320 p e B L I P T Y P . S e a
0077340 r c h e s f o r t h e N t
0077360 h b l i p o f t h e d e
0077400 s i r e d t y p e , b e g i
0077420 n n i n g w i t h t h e f
0077440 r a m e s p e c i f i e d b
0077460 y t h e s t a c k d e s c
0077500 r i p t o r I P O S , a n d
0077520 f o l l o w i n g t h e c
0077540 o n t r o l c h a i n . \r \r (
0077560 B L I P S C A N B L I P T Y P
0077600 I P O S ) \t [ F u n c t i
0077620 o n ] \r R e t u r n s a s t
0077640 a c k p o i n t e r t o t
0077660 h e f r a m e i n w h i c
0077700 h a b l i p o f t y p e
0077720 B L I P T Y P i s l o c a
0077740 t e d . S e a r c h b e g
0077760 i n s a t t h e f r a m e
0100000 s p e c i f i e d b y t h
0100020 e s t a c k d e s c r i p t
0100040 o r I P O S a n d f o l l
0100060 o w s t h e c o n t r o l
0100100 c h a i n . \r \r \r 1 1 . 5 \t
0100120 G e n e r a t o r s \r \r A g e
0100140 n e r a t o r i s l i k e
0100160 a s u b r o u t i n e e x c
0100200 e p t t h a t i t r e t a
0100220 i n s i n f o r m a t i o n
0100240 a b o u t p r e v i o u s t
0100260 i m e s i t h a s b e e n
0100300 c a l l e d . S o m e o
0100320 f t h i s s t a t e m a y
0100340 b e d a t a ( f o r e x
0100360 a m p l e , t h e s e e d
0100400 i n a r a n d o m n u m b
0100420 e r g e n e r a t o r ) , a
0100440 n d s o m e m a y b e i
0100460 n p r o g r a m s t a t e
0100500 ( a s i n a r e c u r s i
0100520 v e g e n e r a t o r w h i
0100540 c h f i n d s a l l t h e
0100560 a t o m s i n a l i s t
0100600 s t r u c t u r e ) . F o
0100620 r e x a m p l e , i f L I
0100640 S T G E N i s d e f i n e d
0100660 b y : \r ( D E F I N E Q ( L
0100700 I S T G E N ( L ) \r
0100720 ( i f L t h e n ( P R O
0100740 D U C E ( C A R L ) ) \r
0100760 (
0101000 L I S T G E N ( C D R L ) )
0101020 ) ) \r w e c a n u s e t h
0101040 e f u n c t i o n G E N E R
0101060 A T O R ( d e s c r i b e d
0101100 b e l o w ) t o c r e a t e
0101120 a g e n e r a t o r t h a
0101140 t u s e s L I S T G E N t
0101160 o p r o d u c e t h e e l
0101200 e m e n t s o f a l i s t
0101220 o n e a t a t i m e ,
0101240 e . g . , \r ( S E T Q G R (
0101260 G E N E R A T O R ( L I S T G
0101300 E N ' ( A B C ) ) ) ) \r c
0101320 r e a t e s a g e n e r a t
0101340 o r , w h i c h c a n b e
0101360 c a l l e d b y \r ( G E N E
0101400 R A T E G R ) \r t o p r o d
0101420 u c e a s v a l u e s o n
0101440 s u c c e s s i v e c a l l
0101460 s , A , B , C . W h e
0101500 n G E N E R A T E ( n o t
0101520 G E N E R A T O R ) i s c a
0101540 l l e d t h e f i r s t t
0101560 i m e , i t s i m p l y s
0101600 t a r t s e v a l u a t i n g
0101620 ( L I S T G E N ' ( A B
0101640 C ) ) . P R O D U C E g e
0101660 t s c a l l e d f r o m L
0101700 I S T G E N , a n d p o p s
0101720 b a c k u p t o G E N E
0101740 R A T E w i t h t h e i n
0101760 d i c a t e d v a l u e a f
0102000 t e r s a v i n g t h e s
0102020 t a t e . W h e n G E N E
0102040 R A T E g e t s c a l l e d
0102060 a g a i n , i t c o n t i
0102100 n u e s f r o m w h e r e
0102120 t h e l a s t P R O D U C E
0102140 l e f t o f f . T h i s
0102160 p r o c e s s c o n t i n u
0102200 e s u n t i l f i n a l l y
0102220 L I S T G E N c o m p l e t
0102240 e s a n d r e t u r n s a
0102260 v a l u e ( i t d o e s n
0102300 ' t m a t t e r w h a t i
0102320 t i s ) . G E N E R A T E
0102340 t h e n r e t u r n s G R
0102360 i t s e l f a s i t s v
0102400 a l u e , s o t h a t t h
0102420 e p r o g r a m t h a t c
0102440 a l l e d G E N E R A T E c
0102460 a n t e l l t h a t i t
0102500 i s f i n i s h e d , i . e
0102520 . , t h e r e a r e n o
0102540 m o r e v a l u e s t o b
0102560 e g e n e r a t e d . \r ( G E
0102600 N E R A T O R F O R M # # C
0102620 O M V A R # # ) \t [ N L a m
0102640 b d a F u n c t i o n ] \r A n
0102660 n l a m b d a f u n c t i o
0102700 n t h a t c r e a t e s a
0102720 g e n e r a t o r w h i c h
0102740 u s e s F O R M # # t o
0102760 c o m p u t e v a l u e s .
0103000 G E N E R A T O R r e t u r
0103020 n s a g e n e r a t o r h
0103040 a n d l e w h i c h i s r
0103060 e p r e s e n t e d b y a
0103100 d o t t e d p a i r o f s
0103120 t a c k p o i n t e r s . \r C
0103140 O M V A R # # i s o p t i o
0103160 n a l . I f i t s v a l
0103200 u e ( E V A L o f ) i s
0103220 a g e n e r a t o r h a n d
0103240 l e , t h e l i s t s t r
0103260 u c t u r e a n d s t a c k
0103300 p o i n t e r s w i l l b
0103320 e r e u s e d . O t h e r
0103340 w i s e , a n e w g e n e
0103360 r a t o r h a n d l e w i l
0103400 l b e c o n s t r u c t e d
0103420 . \r G E N E R A T O R c o m p
0103440 i l e s o p e n . \r \r ( P R O
0103460 D U C E V A L ) \t [ F u n
0103500 c t i o n ] \r U s e d f r o m
0103520 w i t h i n ( b e l o w )
0103540 a g e n e r a t o r t o r
0103560 e t u r n V A L a s t h e
0103600 v a l u e o f t h e c o
0103620 r r e s p o n d i n g c a l l
0103640 t o G E N E R A T E . \r \r (
0103660 G E N E R A T E H A N D L E
0103700 V A L ) \t [ F u n c t i o n
0103720 ] \r R e s t a r t s t h e g
0103740 e n e r a t o r r e p r e s e
0103760 n t e d b y H A N D L E .
0104000 V A L i s r e t u r n e d
0104020 a s t h e v a l u e o f
0104040 t h e P R O D U C E w h i
0104060 c h l a s t s u s p e n d e
0104100 d t h e o p e r a t i o n
0104120 o f t h e g e n e r a t o r
0104140 . W h e n t h e g e n e
0104160 r a t o r r u n s o u t o
0104200 f v a l u e s , G E N E R A
0104220 T E r e t u r n s H A N D L
0104240 E i t s e l f . \r \r E x a m p
0104260 l e s : \r T h e f o l l o w i
0104300 n g f u n c t i o n w i l l
0104320 g o d o w n r e c u r s i
0104340 v e l y t h r o u g h a l
0104360 i s t s t r u c t u r e a n
0104400 d p r o d u c e t h e a t
0104420 o m s i n t h e l i s t
0104440 s t r u c t u r e o n e a t
0104460 a t i m e . \r ( D E F I N E
0104500 Q ( L E A V E S G ( L ) \r
0104520 ( i f ( A T O M L ) \r
0104540 t h e n ( P R O D U
0104560 C E L ) \r e l s e
0104600 ( L E A V E S G ( C A R L )
0104620 ) \r ( i f
0104640 ( C D R L ) \r
0104660 t h e n ( L E A V E S
0104700 G ( C D R L ) ] \r T h e f
0104720 o l l o w i n g f u n c t i o
0104740 n p r i n t s e a c h o f
0104760 t h e s e a t o m s a s
0105000 i t a p p e a r s . I t
0105020 i l l u s t r a t e s h o w
0105040 a l o o p c a n b e s e
0105060 t u p t o u s e a g e
0105100 n e r a t o r . \r ( D E F I N E
0105120 Q ( P L E A V E S G 1 ( L )
0105140 \r ( P R O G ( X L H A
0105160 N D L E ) \r (
0105200 S E T Q L H A N D L E ( G E
0105220 N E R A T O R ( L E A V E S G
0105240 L ) ) ) \r L P (
0105260 S E T Q X ( G E N E R A T E
0105300 L H A N D L E ) ) \r
0105320 ( i f ( E Q X L H
0105340 A N D L E ) \r
0105360 t h e n ( R E T U R N
0105400 N I L ) ) \r
0105420 ( P R I N T X ) \r
0105440 ( G O L P ) ) ] \r N o t
0105460 e t h a t t h e l o o p
0105500 t e r m i n a t e s w h e n
0105520 t h e v a l u e o f t h e
0105540 g e n e r a t o r i s E Q
0105560 t o t h e d o t t e d p
0105600 a i r w h i c h i s t h e
0105620 v a l u e p r o d u c e d
0105640 b y t h e c a l l t o G
0105660 E N E R A T O R . A C L I S
0105700 P i t e r a t i v e o p e r
0105720 a t o r , O U T O F , i s
0105740 p r o v i d e d w h i c h m
0105760 a k e s i t m u c h e a s
0106000 i e r t o w r i t e t h e
0106020 l o o p i n P L E A V E S
0106040 G 1 . O U T O F ( o r o
0106060 u t o f ) c a n p r e c e d
0106100 e a f o r m w h i c h i
0106120 s t o b e u s e d a s
0106140 a g e n e r a t o r . O n
0106160 e a c h i t e r a t i o n ,
0106200 t h e i t e r a t i o n v
0106220 a r i a b l e w i l l b e
0106240 s e t t o s u c c e s s i v
0106260 e v a l u e s r e t u r n e
0106300 d b y t h e g e n e r a t
0106320 o r ; t h e l o o p w i l
0106340 l b e t e r m i n a t e d
0106360 a u t o m a t i c a l l y w h
0106400 e n t h e g e n e r a t o r
0106420 r u n s o u t . T h e r
0106440 e f o r e , t h e f o l l o
0106460 w i n g i s e q u i v a l e
0106500 n t t o t h e a b o v e
0106520 p r o g r a m P L E A V E S G
0106540 1 : \r ( D E F I N E Q ( P L E
0106560 A V E S G 2 ( L ) \r ( f
0106600 o r X o u t o f ( L E A V
0106620 E S G L ) d o ( P R I N T
0106640 x ) ) ] \r H e r e i s a n
0106660 o t h e r e x a m p l e ; t
0106700 h e f o l l o w i n g f o r
0106720 m w i l l p r i n t t h e
0106740 f i r s t N a t o m s . \r
0106760 ( f o r X o u t o f ( M A
0107000 P A T O M S ( F U N C T I O N
0107020 P R O D U C E ) ) \r a s
0107040 I f r o m 1 t o N d
0107060 o ( P R I N T X ) ) \r \r 1 1
0107100 . 6 \t C o r o u t i n e s \r
0107120 \r T h i s p a c k a g e p r
0107140 o v i d e s f a c i l i t i e
0107160 s f o r t h e c r e a t i
0107200 o n a n d u s e o f f u
0107220 l l y g e n e r a l c o r o
0107240 u t i n e s t r u c t u r e s
0107260 . I t u s e s a s t a
0107300 c k p o i n t e r t o p r
0107320 e s e r v e t h e s t a t e
0107340 o f a c o r o u t i n e ,
0107360 a n d a l l o w s a r b i
0107400 t r a r y s w i t c h i n g
0107420 b e t w e e n N d i f f e r
0107440 e n t c o r o u t i n e s ,
0107460 r a t h e r t h a n j u s t
0107500 a c a l l t o a g e n
0107520 e r a t o r a n d r e t u r
0107540 n . T h i s p a c k a g e
0107560 i s s l i g h t l y m o r
0107600 e e f f i c i e n t t h a n
0107620 t h e g e n e r a t o r p
0107640 a c k a g e d e s c r i b e d
0107660 a b o v e , a n d a l l o
0107700 w s m o r e f l e x i b i l
0107720 i t y o n s p e c i f i c a
0107740 t i o n o f w h a t t o
0107760 d o w h e n a c o r o u t
0110000 i n e t e r m i n a t e s . \r
0110020 ( C O R O U T I N E C A L L P
0110040 T R # # C O R O U T P T R # #
0110060 C O R O U T F O R M # # E N
0110100 D F O R M # # ) \t [ N L a m
0110120 b d a F u n c t i o n ] \r T h
0110140 i s n l a m b d a f u n c t
0110160 i o n i s u s e d t o c
0110200 r e a t e a c o r o u t i n
0110220 e a n d i n i t i a l i z e
0110240 t h e l i n k a g e . C
0110260 A L L P T R # # a n d C O R
0110300 O U T P T R # # a r e t h e
0110320 n a m e s o f t w o v a
0110340 r i a b l e s , w h i c h w
0110360 i l l b e s e t t o a p
0110400 p r o p r i a t e s t a c k
0110420 p o i n t e r s . I f t h
0110440 e v a l u e s o f C A L L
0110460 P T R # # o r C O R O U T P
0110500 T R # # a r e a l r e a d y
0110520 s t a c k p o i n t e r s ,
0110540 t h e s t a c k p o i n t
0110560 e r s w i l l b e r e u s
0110600 e d . C O R O U T F O R M #
0110620 # i s t h e f o r m w h
0110640 i c h i s e v a l u a t e d
0110660 t o s t a r t t h e c o
0110700 r o u t i n e ; E N D F O R M
0110720 # # i s a f o r m t o
0110740 b e e v a l u a t e d i f
0110760 C O R O U T F O R M # # a c t
0111000 u a l l y r e t u r n s w h
0111020 e n i t r u n s o u t o
0111040 f v a l u e s . \r C O R O U T
0111060 I N E c o m p i l e s o p e
0111100 n . \r \r ( R E S U M E F R O M
0111120 P T R T O P T R V A L )
0111140 \t [ F u n c t i o n ] \r U s e d
0111160 t o t r a n s f e r c o
0111200 n t r o l f r o m o n e c
0111220 o r o u t i n e t o a n o t
0111240 h e r . F R O M P T R s h
0111260 o u l d b e t h e s t a c
0111300 k p o i n t e r f o r t h
0111320 e c u r r e n t c o r o u t
0111340 i n e , w h i c h w i l l
0111360 b e s m a s h e d t o p r
0111400 e s e r v e t h e c u r r e
0111420 n t s t a t e . T O P T R
0111440 s h o u l d b e t h e s
0111460 t a c k p o i n t e r w h i
0111500 c h h a s p r e s e r v e d
0111520 t h e s t a t e o f t h
0111540 e c o r o u t i n e t o b
0111560 e t r a n s f e r r e d t o
0111600 , a n d V A L i s t h e
0111620 v a l u e t h a t i s t
0111640 o b e r e t u r n e d t o
0111660 t h e l a t t e r c o r o
0111700 u t i n e a s t h e v a l
0111720 u e o f t h e R E S U M E
0111740 w h i c h s u s p e n d e d
0111760 t h e o p e r a t i o n o
0112000 f t h a t c o r o u t i n e
0112020 . \r \r F o r e x a m p l e ,
0112040 t h e f o l l o w i n g i s
0112060 t h e w a y o n e m i g
0112100 h t w r i t e t h e L E A
0112120 V E S p r o g r a m u s i n
0112140 g t h e c o r o u t i n e
0112160 p a c k a g e : \r ( D E F I N E
0112200 Q ( L E A V E S C ( L C O
0112220 R O U T P T R C A L L P T R )
0112240 \r ( i f ( A T O M L )
0112260 \r t h e n ( R E S U M
0112300 E C O R O U T P T R C A L L
0112320 P T R L ) \r e l s e
0112340 ( L E A V E S C ( C A R L )
0112360 C O R O U T P T R C A L L P
0112400 T R ) \r ( i f
0112420 ( C D R L ) t h e n ( L
0112440 E A V E S C ( C D R L ) C
0112460 O R O U T P T R C A L L P T R
0112500 ) ) ) ) ] \r A f u n c t i o n
0112520 P L E A V E S C w h i c h
0112540 u s e s L E A V E S C c a n
0112560 b e d e f i n e d a s f
0112600 o l l o w s : \r ( D E F I N E Q
0112620 ( P L E A V E S C ( L ) \r
0112640 ( b i n d P L H A N D L E
0112660 L H A N D L E \r f i r s t
0112700 ( C O R O U T I N E P L H A
0112720 N D L E L H A N D L E \r
0112740
0112760 ( L E A V E S C L L H A N
0113000 D L E P L H A N D L E ) \r
0113020
0113040 ( R E T F R O M ' P L E A
0113060 V E S C ) ) \r d o ( P R
0113100 I N T ( R E S U M E P L H A
0113120 N D L E L H A N D L E ) ) ) )
0113140 ] \r B y R E S U M E i n g L
0113160 E A V E S C r e p e a t e d l
0113200 y , t h i s f u n c t i o n
0113220 w i l l p r i n t a l l
0113240 t h e l e a v e s o f l i
0113260 s t L a n d t h e n r e
0113300 t u r n o u t o f P L E A
0113320 V E S C v i a t h e R E T
0113340 F R O M . T h e R E T F R
0113360 O M i s n e c e s s a r y
0113400 t o b r e a k o u t o f
0113420 t h e n o n - t e r m i n a t
0113440 i n g d o - l o o p . T h
0113460 i s w a s d o n e t o i
0113500 l l u s t r a t e t h e a d
0113520 d i t i o n a l f l e x i b i
0113540 l i t y a l l o w e d t h r
0113560 o u g h t h e u s e o f
0113600 E N D F O R M # # . \r W e u s
0113620 e t w o c o r o u t i n e s
0113640 w o r k i n g o n t w o
0113660 t r e e s i n t h e e x a
0113700 m p l e E Q L E A V E S , d
0113720 e f i n e d b e l o w . E
0113740 Q L E A V E S t e s t s t o
0113760 s e e w h e t h e r t w o
0114000 t r e e s h a v e t h e
0114020 s a m e l e a f s e t i n
0114040 t h e s a m e o r d e r ,
0114060 e . g . , ( E Q L E A V E S
0114100 ' ( A B C ) ' ( A B
0114120 ( C ) ) ) i s t r u e . \r (
0114140 D E F I N E Q ( E Q L E A V E
0114160 S ( L 1 L 2 ) \r ( b
0114200 i n d L H A N D L E 1 L H A
0114220 N D L E 2 P E E L 1 E L 2
0114240 \r f i r s t ( C O R
0114260 O U T I N E P E L H A N D L
0114300 E 1 ( L E A V E S C L 1 L
0114320 H A N D L E 1 P E ) ' N O -
0114340 M O R E ) \r
0114360 ( C O R O U T I N E P E L
0114400 H A N D L E 2 ( L E A V E S C
0114420 L 2 L H A N D L E 2 P E )
0114440 ' N O - M O R E ) \r
0114460 d o ( S E T Q E L 1 ( R E
0114500 S U M E P E L H A N D L E 1
0114520 ) ) \r ( S E T Q
0114540 E L 2 ( R E S U M E P E
0114560 L H A N D L E 2 ) ) \r
0114600 ( i f ( N E Q E L 1
0114620 E L 2 ) \r t h
0114640 e n ( R E T U R N N I L ) )
0114660 \r r e p e a t u n t i
0114700 l ( E Q E L 1 ' N O - M O
0114720 R E ) \r f i n a l l y
0114740 ( R E T U R N T ) ) ) ] \r \r
0114760 1 1 . 7 \t P o s s i b i l i
0115000 t i e s L i s t s \r \r A p o
0115020 s s i b i l i t i e s l i s t
0115040 i s t h e i n t e r f a c
0115060 e b e t w e e n a g e n e
0115100 r a t o r a n d a c o n s
0115120 u m e r . T h e p o s s i
0115140 b i l i t i e s l i s t i s
0115160 i n i t i a l i z e d b y
0115200 a c a l l t o P O S S I B
0115220 I L I T I E S , a n d e l e
0115240 m e n t s a r e o b t a i n
0115260 e d f r o m i t b y u s
0115300 i n g T R Y N E X T . B y
0115320 u s i n g t h e s p a g h
0115340 e t t i s t a c k t o m a
0115360 i n t a i n s e p a r a t e
0115400 e n v i r o n m e n t s , t h
0115420 i s p a c k a g e a l l o w
0115440 s a r e g i m e i n w h
0115460 i c h a g e n e r a t o r
0115500 c a n p u t a f e w i t
0115520 e m s i n a p o s s i b i
0115540 l i t i e s l i s t , s u s
0115560 p e n d i t s e l f u n t i
0115600 l t h e y h a v e b e e n
0115620 c o n s u m e d , a n d b
0115640 e s u b s e q u e n t l y a
0115660 r o u s e d a n d g e n e r
0115700 a t e s o m e m o r e . \r (
0115720 P O S S I B I L I T I E S F O
0115740 R M # # ) \t [ N L a m b d a
0115760 F u n c t i o n ] \r T h i s
0116000 n l a m b d a f u n c t i o n
0116020 i s u s e d f o r t h e
0116040 i n i t i a l c r e a t i o
0116060 n o f a p o s s i b i l i
0116100 t i e s l i s t . F O R M
0116120 # # w i l l b e e v a l u
0116140 a t e d t o c r e a t e t
0116160 h e l i s t . I t s h o
0116200 u l d u s e t h e f u n c
0116220 t i o n s N O T E a n d A
0116240 U - R E V O I R d e s c r i b
0116260 e d b e l o w t o g e n e
0116300 r a t e p o s s i b i l i t i
0116320 e s . N o r m a l l y , o
0116340 n e w o u l d s e t s o m
0116360 e v a r i a b l e t o t h
0116400 e p o s s i b i l i t i e s
0116420 l i s t w h i c h i s r e
0116440 t u r n e d , s o i t c a
0116460 n b e u s e d l a t e r ,
0116500 e . g . : \r ( S E T Q P L I
0116520 S T ( P O S S I B I L I T I E
0116540 S ( G E N E R F N V 1 V 2
0116560 ) ) ) . \r P O S S I B I L I T I
0116600 E S c o m p i l e s o p e n
0116620 . \r \r ( N O T E V A L L S T
0116640 F L G ) \t [ F u n c t i o n
0116660 ] \r U s e d w i t h i n a
0116700 g e n e r a t o r t o p u t
0116720 i t e m s o n t h e p o
0116740 s s i b i l i t i e s l i s t
0116760 b e i n g g e n e r a t e d
0117000 . I f L S T F L G i s
0117020 e q u a l t o N I L , V A
0117040 L i s t r e a t e d a s
0117060 a s i n g l e i t e m .
0117100 I f L S T F L G i s n o n
0117120 - N I L , t h e n t h e l
0117140 i s t V A L i s N C O N C
0117160 e d o n t h e e n d o f
0117200 t h e p o s s i b i l i t i
0117220 e s l i s t . N o t e t
0117240 h a t i t i s p e r f e c
0117260 t l y r e a s o n a b l e t
0117300 o c r e a t e a p o s s i
0117320 b i l i t i e s l i s t u s
0117340 i n g a s e c o n d g e n
0117360 e r a t o r , a n d N O T E
0117400 t h a t l i s t a s p o
0117420 s s i b i l i t i e s f o r
0117440 t h e c u r r e n t g e n e
0117460 r a t o r w i t h L S T F L
0117500 G e q u a l t o T . T
0117520 h e l o w e r g e n e r a t
0117540 o r w i l l b e r e s u m
0117560 e d a t t h e a p p r o p
0117600 r i a t e p o i n t . \r \r ( A
0117620 U - R E V O I R V A L # # )
0117640 \t [ N o S p r e a d F u n c
0117660 t i o n ] \r P u t s V A L # #
0117700 o n t h e p o s s i b i l
0117720 i t i e s l i s t i f i t
0117740 i s g i v e n , a n d t
0117760 h e n s u s p e n d s t h e
0120000 g e n e r a t o r a n d r
0120020 e t u r n s t o t h e c o
0120040 n s u m e r i n s u c h a
0120060 f a s h i o n t h a t c o
0120100 n t r o l w i l l r e t u r
0120120 n t o t h e g e n e r a t
0120140 o r a t t h e A U - R E V
0120160 O I R i f t h e c o n s u
0120200 m e r e x h a u s t s t h e
0120220 p o s s i b i l i t i e s l
0120240 i s t . \r N o t e : N I L
0120260 i s n o t p u t o n t h
0120300 e p o s s i b i l i t i e s
0120320 l i s t u n l e s s i t i
0120340 s e x p l i c i t l y g i v
0120360 e n a s a n a r g u m e n
0120400 t t o A U - R E V O I R ,
0120420 i . e . , ( A U - R E V O I R
0120440 ) a n d ( A U - R E V O I R
0120460 N I L ) a r e n o t t h
0120500 e s a m e . A U - R E V O
0120520 I R a n d A D I E U a r e
0120540 l a m b d a n o s p r e a d
0120560 s t o e n a b l e t h e m
0120600 t o d i s t i n g u i s h
0120620 t h e s e t w o c a s e s .
0120640 \r \r ( A D I E U V A L # # )
0120660 \t [ N o S p r e a d F u n c
0120700 t i o n ] \r L i k e A U - R E
0120720 V O I R e x c e p t r e l e
0120740 a s e s t h e g e n e r a t
0120760 o r i n s t e a d o f s u
0121000 s p e n d i n g i t . \r \r ( T
0121020 R Y N E X T P L S T # # E N
0121040 D F O R M # # V A L # # )
0121060 \t [ N L a m b d a F u n c t i
0121100 o n ] \r T h i s n l a m b d a
0121120 f u n c t i o n a l l o w s
0121140 a c o n s u m e r t o u
0121160 s e a p o s s i b i l i t i
0121200 e s l i s t . I t r e m
0121220 o v e s t h e f i r s t i
0121240 t e m f r o m t h e p o s
0121260 s i b i l i t i e s l i s t
0121300 n a m e d b y P L S T # #
0121320 ( i . e . P L S T # # m u s
0121340 t b e a n a t o m w h o
0121360 s e v a l u e i s a p o
0121400 s s i b l i t i e s l i s t )
0121420 , a n d r e t u r n s t h
0121440 a t i t e m , p r o v i d e
0121460 d i t i s n o t a g e
0121500 n e r a t o r h a n d l e .
0121520 I f a g e n e r a t o r
0121540 h a n d l e i s e n c o u n
0121560 t e r e d , t h e g e n e r
0121600 a t o r i s r e a w a k e n
0121620 e d . W h e n i t r e t
0121640 u r n s a p o s s i b i l i
0121660 t i e s l i s t , t h i s
0121700 l i s t i s a d d e d t o
0121720 t h e f r o n t o f t h
0121740 e c u r r e n t l i s t .
0121760 W h e n a c a l l t o
0122000 T R Y N E X T c a u s e s a
0122020 g e n e r a t o r t o b e
0122040 a w a k e n e d , V A L # #
0122060 i s r e t u r n e d a s
0122100 t h e v a l u e o f t h e
0122120 A U - R E V O I R w h i c h
0122140 p u t t h a t g e n e r a
0122160 t o r t o s l e e p . I
0122200 f P L S T # # i s e m p t
0122220 y , i t e v a l u a t e s
0122240 E N D F O R M # # i n t h e
0122260 c a l l e r ' s e n v i r o
0122300 n m e n t . \r T R Y N E X T c
0122320 o m p i l e s o p e n . \r \r (
0122340 C L E A N P O S L S T P L S T
0122360 ) \t [ F u n c t i o n ] \r T
0122400 h i s f u n c t i o n i s
0122420 p r o v i d e d t o r e l e
0122440 a s e a n y s t a c k p o
0122460 i n t e r s w h i c h m a y
0122500 b e l e f t i n t h e
0122520 P L S T w h i c h w a s n
0122540 o t u s e d t o e x h a u
0122560 s t i o n . \r \r F o r e x a m
0122600 p l e , F I B i s a g e
0122620 n e r a t o r f o r f i b o
0122640 n n a c i n u m b e r s .
0122660 I t s t a r t s o u t b y
0122700 N O T E i n g i t s t w o
0122720 a r g u m e n t s , t h e n
0122740 s u s p e n d s i t s e l f
0122760 . T h e r e a f t e r , o
0123000 n b e i n g r e - a w a k e
0123020 n e d , i t w i l l N O T
0123040 E t w o m o r e t e r m s
0123060 i n t h e s e r i e s a
0123100 n d s u s p e n d s a g a i
0123120 n . P R I N T F I B u s e
0123140 s F I B t o p r i n t t
0123160 h e f i r s t N f i b o n
0123200 a c c i n u m b e r s . \r ( D
0123220 E F I N E Q ( F I B ( F 1
0123240 F 2 ) \r ( d o ( N O T E
0123260 F 1 ) \r ( N O T E
0123300 F 2 ) \r ( S E T Q
0123320 F 1 ( I P L U S F 1 F 2 )
0123340 ) \r ( S E T Q F 2
0123360 ( I P L U S F 1 F 2 ) ) \r
0123400 ( A U - R E V O I R
0123420 ) ] \r N o t e t h a t t h i
0123440 s A U - R E V O I R j u s t
0123460 s u s p e n d s t h e g e
0123500 n e r a t o r a n d a d d s
0123520 n o t h i n g t o t h e
0123540 p o s s i b i l i t i e s l i
0123560 s t e x c e p t t h e g e
0123600 n e r a t o r . \r ( D E F I N E
0123620 Q ( P R I N T F I B ( N ) \r
0123640 ( P R O G ( ( F L
0123660 ( P O S S I B I L I T I E S (
0123700 F I B 0 1 ) ) ) ) \r
0123720 ( R P T Q N (
0123740 P R I N T ( T R Y N E X T
0123760 F L ) ) ) \r
0124000 ( C L E A N P O S L S T F L
0124020 ) ] \r N o t e t h a t F I B
0124040 i t s e l f w i l l n e v
0124060 e r t e r m i n a t e . \r \r C
0124100 o p y r i g h t ( c ) 1 9 8
0124120 5 X e r o x C o r p o r a t
0124140 i o n . A l l r i g h t s
0124160 r e s e r v e d . \r \r
0124174