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