Why Y works

Embed Size (px)

Citation preview

  • 8/18/2019 Why Y works

    1/10

    2

    A L e c t u r e o n t h e   W h y  o f  Y 

    b y M a t t h i a s F e l l e i s e n  

  • 8/18/2019 Why Y works

    2/10

    0 . 1 . ( Y Y  ) W O R K S ! 3

    I s t h i s t h e f u n c t i o n   l e n g t h   ?

    ( d e n e   l e n g t h  

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    I t s u r e i s .

    S u p p o s e ( d e n e   . . . . . . ) n o l o n g e r w o r k s .

    C a n y o u d e s c r i b e i n y o u r o w n w o r d s w h a t

    l e n g t h   d o e s ?

    F o r o n e , t h e b o d y o f l e n g t h   c a n n o t r e f e r t o  

    l e n g t h  

    T h e n w e m i g h t a s w e l l w r i t e s o m e t h i n g l i k e

    t h i s .

    ( d e n e   l e n g t h  

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( h u k a i r s ( c d r l ) ) ) ) ) )

    Y e s , e x c e p t t h a t ( d e n e   . . . . . . ) d o e s n ' t

    w o r k a n y m o r e .

    S o p e r h a p s s o m e t h i n g m o r e l i k e t h i s ?

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( h u k a i r s ( c d r l ) ) ) ) )

    Y e s , t h a t ' s b e t t e r .

    B u t w h a t h a p p e n e d t o t h e f u n c t i o n ? I t i s n o l o n g e r r e c u r s i v e .

    A n d w h a t d o e s i t d o ? I t m e a s u r e s t h e l e n g t h o f t h e e m p t y l i s t a n d  

    n o t h i n g e l s e .

    A n d w h a t d o e s h u h a i r s d o ? W h o c a r e s . T h e f u n c t i o n d o e s n ' t w o r k f o r

    n o n - e m p t y l i s t s i n a n y c a s e .

    S u p p o s e w e c o u l d n a m e t h i s n e w f u n c t i o n .

    W h a t w o u l d b e a g o o d n a m e ?

    W e t h i n k   l e n g t h  

    0

    i s g r e a t b e c a u s e t h e

    f u n c t i o n o n l y m e a s u r e s l i s t s o f l e n g t h 0 .

  • 8/18/2019 Why Y works

    3/10

    H o w w o u l d y o u w r i t e a f u n c t i o n t h a t

    m e a s u r e s t h e l e n g t h o f l i s t s t h a t c o n t a i n o n e

    i t e m ?

    W e l l , w e c o u l d t r y t h e f o l l o w i n g .

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h  

    0

    ( c d r l ) ) ) ) )

    A l m o s t , b u t ( d e n e   . . . . . . ) d o e s n ' t w o r k f o r

    l e n g t h  

    0

    S o ? R e p l a c e l e n g t h  

    0

    b y i t s d e n i t i o n .

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1  

    ( ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( h u k a i r s ( c d r l ) ) ) ) )

    ( c d r l ) ) ) ) )

    A n d w h a t ' s a g o o d n a m e f o r t h i s f u n c t i o n ? T h a t ' s e a s y : l e n g t h  

    1

    I s t h i s t h e f u n c t i o n t h a t w o u l d m e a s u r e t h e

    l e n g h t o f l i s t s t h a t c o n t a i n t w o i t e m s ?

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1  

    ( ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1  

    ( ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1  

    ( h u k a i r s

    ( c d r l ) ) ) ) )

    ( c d r l ) ) ) ) )

    ( c d r l ) ) ) ) )

    Y e s , t h i s i s l e n g t h  

    2

    . W e j u s t e x p a n d t h e c a l l

    t o  h u k a i r s t o g e t t h e n e x t v e r s i o n o f l e n g t h  

    N o w , w h a t d o y o u t h i n k r e c u r s i o n i s ? W h a t d o y o u m e a n ?

  • 8/18/2019 Why Y works

    4/10

    0 . 1 . ( Y Y  ) W O R K S ! 5

    W e l l , w e h a v e s e e n h o w t o m e a s u r e t h e l i s t

    w i t h n o i t e m s , w i t h o n e i t e m , w i t h t w o , a n d  

    s o o n . H o w c o u l d w e g e t t h e f u n c t i o n   l e n g t h  

    b a c k ?

    I f w e c o u l d w r i t e a n   i n n i t e f u n c t i o n , w e

    c o u l d w r i t e l e n g t h  

    B u t w e c a n ' t w r i t e a n i n n i t e f u n c t i o n . A n d w e s t i l l h a v e a l l t h e s e r e p e t i t i o n s a n d 

    p a t t e r n s i n t h e s e f u n c t i o n s .

    A l l t h e s e p r o g r a m s c o n t a i n a f u n c t i o n t h a t

    l o o k s l i k e l e n g t h   , a n d t h a t ' s n o t r i g h t .

    N o , l e t ' s a b s t r a c t o u t t h e s e p a t t e r n s .

    I s t h i s t h e r i g h t w a y t o r e w r i t e l e n g t h  

    0

    s o 

    t h a t l e n g t h   r e a p p e a r s ?

    ( ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    h u k a i r s )

    I t ' s w o r t h a t r y .

    R e w r i t e l e n g t h  

    1

    i n t h e s a m e s t y l e .

    ( ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    ( ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    h u k a i r s ) )

  • 8/18/2019 Why Y works

    5/10

    6

    A n d  l e n g t h  

    2

    ( ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    ( ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    ( ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    h u k a i r s ) ) )

    C l o s e , b u t t h e r e a r e s t i l l r e p e t i t i o n s . T r u e . L e t ' s g e t r i d o f t h e m .

    W h e r e s h o u l d w e s t a r t ? N a m e t h e f u n c t i o n t h a t t a k e s l e n g t h   a s a n  

    a r g u m e n t a n d t h a t r e t u r n s a f u n c t i o n t h a t

    l o o k s l i k e l e n g t h  

    W h a t ' s a g o o d n a m e f o r t h i s f u n c t i o n ? W h a t a b o u t m k - l e n g t h   f o r \ m a k e l e n g t h   " ?

    O k , d o t h i s t o   l e n g t h  

    0

    . N o p r o b l e m .

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h h u k a i r s ) )

    ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) ) )

  • 8/18/2019 Why Y works

    6/10

    0 . 1 . ( Y Y  ) W O R K S ! 7 

    I s t h i s l e n g t h  

    1

    ?

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h  

    ( m k - l e n g t h h u k a i r s ) ) )

    ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) ) )

    I t s u r e i s . A n d t h i s i s l e n g t h  

    2

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h  

    ( m k - l e n g t h  

    ( m k - l e n g t h h u k a i r s ) ) ) )

    ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) ) )

    C a n y o u d o   l e n g t h  

    3

    ? H e r e w e g o .

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h  

    ( m k - l e n g t h  

    ( m k - l e n g t h  

    ( m k - l e n g t h h u k a i r s ) ) ) ) )

    ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) ) )

    S o w h a t i s r e c u r s i o n ? I t i s l i k e a n i n n i t e t o w e r o f a p p l i c a t i o n s o f

    m k - l e n g t h   t o a n a r b i t r a r y f u n c t i o n .

    D o w e r e a l l y n e e d a n i n n i t e t o w e r ? N o t r e a l l y o f c o u r s e . E v e r y t i m e w e u s e l e n g t h  

    w e o n l y n e e d a n i t e n u m b e r , b u t w e n e v e r

    k n o w h o w m a n y .

    C o u l d w e g u e s s h o w m a n y w e n e e d ? S u r e , b u t w e m a y n o t g u e s s a l a r g e e n o u g h  

    n u m b e r .

    W h e n d o w e n d o u t t h a t w e d i d n ' t g u e s s a  

    l a r g e e n o u g h n u m b e r ?

    W h e n w e a p p l y t h e f u n c t i o n   h u k a i r s t h a t i s

    p a s s e d t o t h e r s t m k - l e n g t h  

    W h a t i f w e c o u l d c r e a t e a n o t h e r a p p l i c a t i o n  

    o f m k - l e n g t h   t o  h u h a i r s a t t h i s p o i n t ?

    T h a t w o u l d p o s t p o n e t h e p r o b l e m b y o n e ,

    a n d b e s i d e s , h o w c o u l d w e d o t h a t ?

  • 8/18/2019 Why Y works

    7/10

    8

    W e l l , s i n c e n o b o d y c a r e s w h a t f u n c t i o n w e

    p a s s t o   m k - l e n g t h   , w e c o u l d p a s s i t m k - l e n g t h  

    i n i t i a l l y .

    T h a t ' s t h e r i g h t i d e a . A n d t h e n w e i n v o k e

    m k - l e n g t h   o n  h u h a i r s a n d t h e r e s u l t o f t h i s

    o n t h e c d r  s o t h a t w e g e t o n e m o r e p i e c e o f

    t h e t o w e r .

    T h e n t h i s i s s t i l l l e n g t h  

    0

    ?

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h m k - l e n g t h   ) )

    ( l a m b d a   ( m k - l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( m k - l e n g t h   ( c d r l ) ) ) ) ) ) )

    Y e s . A n d w h e n w e a p p l y   m k - l e n g t h   o n c e , w e

    g e t l e n g t h  

    1

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h m k - l e n g t h   ) )

    ( l a m b d a   ( m k - l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( ( m k - l e n g t h h u k a i r s )

    ( c d r l ) ) ) ) ) ) )

    C o u l d w e d o t h i s m o r e t h a n o n c e ? Y e s , j u s t k e e p p a s s i n g   m k - l e n g t h   t o i t s e l f ,

    a n d w e c a n d o t h i s a s o f t e n a s w e n e e d t o !

    W h a t w o u l d y o u c a l l t h i s f u n c t i o n ?

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h m k - l e n g t h   ) )

    ( l a m b d a   ( m k - l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( ( m k - l e n g t h m k - l e n g t h   )

    ( c d r l ) ) ) ) ) ) )

    I t i s l e n g t h   , o f c o u r s e .

    E x c e p t t h a t i t n o l o n g e r c o n t a i n s t h e

    f u n c t i o n t h a t l o o k s l i k e l e n g t h   . C a n w e x  

    t h a t ?

    W e c o u l d e x t r a c t t h e s e l f - a p p l i c a t i o n o f

    m k - l e n g t h   a n d c a l l i t l e n g t h  

    W h y ? B e c a u s e i t r e a l l y m a k e s t h e f u n c t i o n  l e n g t h  

    B u t ( m k - l e n g t h m k - l e n g t h   ) i s n o t a f u n c t i o n .

    I t o n l y r e t u r n s a f u n c t i o n .

    S o w h a t d o w e d o ?

  • 8/18/2019 Why Y works

    8/10

    0 . 1 . ( Y Y  ) W O R K S ! 9

    M a k e t h e s e l f - a p p l i c a t i o n o f m k - l e n g t h   i n t o a  

    f u n c t i o n .

    N o p r o b l e m , w e j u s t u s e t h e o l d t r i c k o f

    w r a p p i n g a   l a m b d a   a r o u n d t h e a p p l i c a t i o n .

    A f t e r a l l , t h e s e l f - a p p l i c a t i o n d o e s r e t u r n a  

    f u n c t i o n !

    W h i c h f u n c t i o n ? T h e f u n c t i o n  l e n g t h   . R e m e m b e r ?

    O k , d o i t !

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h m k - l e n g t h   ) )

    ( l a m b d a   ( m k - l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1  

    ( ( l a m b d a   ( x  )

    ( ( m k - l e n g t h m k - l e n g t h   ) x  ) )

    ( c d r l ) ) ) ) ) ) )

    M o v e o u t t h e n e w f u n c t i o n s o t h a t w e g e t

    l e n g t h   b a c k .

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h m k - l e n g t h   ) )

    ( l a m b d a   ( m k - l e n g t h   )

    ( ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) )

    ( l a m b d a   ( x  )

    ( ( m k - l e n g t h m k - l e n g t h   ) x  ) ) ) ) )

    I s t h i s o k t o d o ? Y e s . T h i n k a b o u t i t . W e a l w a y s d i d t h e

    r e v e r s e : W h e n w e k n e w w h a t t h e a r g u m e n t

    t o a f u n c t i o n w a s , w e p r o c e e d e d w i t h t h e

    f u n c t i o n b o d y a n d u s e d t h e a r g u m e n t v a l u e

    w h e n e v e r w e s a w t h e p a r a m e t e r n a m e .

    C a n w e e x t r a c t t h e f u n c t i o n t h a t l o o k s l i k e

    l e n g t h   a n d g i v e i t a n a m e ?

    Y e s , i t d o e s n o t d e p e n d o n   m k - l e n g t h   a t a l l !

  • 8/18/2019 Why Y works

    9/10

    1 0

    I s t h i s t h e r i g h t f u n c t i o n ?

    ( ( l a m b d a   ( l e )

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h m k - l e n g t h   ) )

    ( l a m b d a   ( m k - l e n g t h   )

    ( l e ( l a m b d a   ( x  )

    ( ( m k - l e n g t h m k - l e n g t h   ) x  ) ) ) ) ) )

    ( l a m b d a   ( l e n g t h   )

    ( l a m b d a   ( l )

    ( i f ( n u l l ? l ) 0

    ( a d d 1   ( l e n g t h   ( c d r l ) ) ) ) ) ) )

    Y e s .

    W h a t d i d w e a c t u a l l y g e t b a c k ? W e e x t r a c t e d t h e o l d  f u n c t i o n   m k - l e n g t h  

    L e t ' s s e p a r a t e t h e f u n c t i o n t h a t m a k e s l e n g t h  

    f r o m t h e f u n c t i o n t h a t l o o k s l i k e l e n g t h  

    T h a t ' s e a s y .

    ( l a m b d a   ( l e )

    ( ( l a m b d a   ( m k - l e n g t h   )

    ( m k - l e n g t h m k - l e n g t h   ) )

    ( l a m b d a   ( m k - l e n g t h   )

    ( l e ( l a m b d a   ( x  )

    ( ( m k - l e n g t h m k - l e n g t h   ) x  ) ) ) ) ) )

    D o e s t h i s f u n c t i o n h a v e a n a m e ? Y e s , i t i s c a l l e d t h e a p p l i c a t i v e - o r d e r Y 

    c o m b i n a t o r . A t l e a s t , w h e n w e r e w r i t e i t a  

    l i t t l e b i t .

    ( d e n e   Y 

    ( l a m b d a   ( l e )

    ( ( l a m b d a   ( f  )

    ( l e ( l a m b d a   ( x  ) ( ( f f  ) x  ) ) ) )

    ( l a m b d a   ( f  )

    ( l e ( l a m b d a   ( x  ) ( ( f f  ) x  ) ) ) ) ) ) )

    D o e s ( d e n e   . . . . . . ) w o r k a g a i n ?

    S u r e , n o w t h a t w e k n o w w h a t r e c u r s i o n i s .

  • 8/18/2019 Why Y works

    10/10

    0 . 1 . ( Y Y  ) W O R K S ! 1 1

    D o y o u n o w k n o w w h y   Y  w o r k s ? R e a d t h i s c h a p t e r o n e m o r e t i m e a n d y o u  

    w i l l .

    D o e s ( Y Y  ) w o r k , t o o ?

    A n d h o w i t w o r k s ! ! !