why y works
TRANSCRIPT
-
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
4
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
1
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 ! ! !