Lisp Tutorial Notes

Embed Size (px)

Citation preview

  • 7/29/2019 Lisp Tutorial Notes

    1/35

    L I S P P r o g r a m m i n g T u t o r i a l N o t e s

    C S C 4 5 1 0

    S a u - M i n g L A U

    D e p a r t m e n t o f C o m p u t e r S c i e n c e a n d E n g i n e e r i n g

    T h e C h i n e s e U n i v e r s i t y o f H o n g K o n g

    S e p t e m b e r 5 , 1 9 9 6

    1 I n t r o d u c t i o n : : : : : : : : : : : : : : : : : : : : : : : : 1

    2 I n t r o d u c t i o n t o L I S P P r i m i t i v e s : : : : : : : : : : : : : 5

    3 L i s t S e l e c t o r s : : : : : : : : : : : : : : : : : : : : : : : 7

    4 L i s t C o n s t r u c t o r s : : : : : : : : : : : : : : : : : : : : : 1 0

    5 P r o c e d u r e D e n i t i o n a n d B i n d i n g : : : : : : : : : : : : 1 3

    6 P r e d i c a t e s a n d C o n d i t i o n a l s : : : : : : : : : : : : : : : 1 7

    7 S i m p l e B r a n c h i n g P r i m i t i v e s : : : : : : : : : : : : : : 2 3

    8 G e n e r a l B r a n c h i n g P r i m i t i v e s : : : : : : : : : : : : : : 2 5

    9 R e p e a t i n g b y R e c u r s i o n : : : : : : : : : : : : : : : : : 2 7

    1 0 R e p e a t i n g b y I t e r a t i o n : : : : : : : : : : : : : : : : : : 2 8

    1 1 M i s c e l l a n e o u s P r i m i t i v e s : : : : : : : : : : : : : : : : : 3 1

    1 2 A s s o c i a t i o n L i s t : : : : : : : : : : : : : : : : : : : : : : 3 3

    1 3 P r o p e r t y L i s t : : : : : : : : : : : : : : : : : : : : : : : 3 4

  • 7/29/2019 Lisp Tutorial Notes

    2/35

    1 I n t r o d u c t i o n

    L i k e m o s t t r a d i t i o n a l p r o g r a m m i n g l a n g u a g e s , L I S P i s p r o c e d u r a l .

    { L I S P p r o g r a m s d e s c r i b e H O W t o p e r f o r m a n a l g o r i t h m .

    { T h i s c o n t r a s t s w i t h d e c l a r a t i v e l a n g u a g e s l i k e P R O L O G , w h o s e

    p r o g r a m s a r e D E C L A R A T I V E a s s e r t i o n s a b o u t a p r o b l e m d o -

    m a i n .

    L I S P i s a F U N C T I O N A L l a n g u a g e . I t s s y n t a x a n d s e m a n t i c s a r e

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

    E v e r y t h i n g i n L I S P i s a f u n c t i o n !

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

    r e t u r n s o n l y o n e v a l u e , w i t h n o s i d e e e c t .

    g ( a , b ) = a + b

    L I S P i s N O T a ' p u r e ' f u n c t i o n a l l a n g u a g e |

    s o m e o f i t s f u n c t i o n s p r o d u c e s i d e e e c t s , e . g . S E T F

    1 . 1 T h e b o w l s a n a l o g y

    W e n o w t a l k a b o u t t h i n g s c a l l e d L I S T S a n d A T O M S .

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

    a n a l o g y w i t h b o w l s , l i k e t h o s e u s e d t o s t o r e t h i n g s i n a r e f r i g e r a t o r .

    O f t e n r e f r i g e r a t o r b o w l s a r e m a d e t o t i n s i d e o n e a n o t h e r s o t h a t

    t h e y a r e e a s y t o s t o r e . H e r e , f o r e x a m p l e , a r e t h r e e s u c h b o w l s :

    ( )

    ( ) ( )

    ( ) ( ) ( )

    + - - - - - - - - - - - - - - - - - + + - - - - - - - + + - - - +

    W e c a n p u t t h e s m a l l b o w l i n s i d e t h e m e d i u m o n e :

    ( ( ) )

    ( + - - - + )

    + - - - - - - - +

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

    b i g b o w l :

    ( ( ( ) ) )

    ( ( + - - - + ) )

    ( + - - - - - - - + )

    + - - - - - - - - - - - - - - - - - +

    1

  • 7/29/2019 Lisp Tutorial Notes

    3/35

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

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

    A l t e r n a t i v e l y , w e c a n p u t b o t h t h e s m a l l b o w l a n d t h e m e d i u m b o w l i n s i d e

    t h e b i g b o w l t h i s w a y :

    ( ( ) )

    ( ( ) ( ) )

    ( + - - - - - - - + + - - - + )

    + - - - - - - - - - - - - - - - - - +

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

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

    O f c o u r s e , w e c a n a l s o p u t s o m e f r u i t i n t h e b o w l s , r e p r e s e n t e d h e r e b y A s

    f o r t h e A p p l e s a n d a P f o r t h e P e a r :

    ( ( ) )

    ( ( A A P ) ( ) )

    ( + - - - - - - - + + - - - + )

    + - - - - - - - - - - - - - - - - - +

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

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

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

    l e t ' s a g r e e t o s a y t h a t t h e b i g b o w l c o n t a i n s a b o w l t h a t c o n t a i n s t h e t w o

    a p p l e s a n d o n e p e a r .

    T h u s C O N T A I N S m e a n s D I R E C T L Y C O N T A I N S , w i t h n o o t h e r c o n t a i n e r

    i n t e r v e n i n g .

    H e r e i s a n o t h e r e x a m p l e :

    ( ( ) )

    ( ) ( ( ) )

    ( A A P ) ( + - - - - - - - + P ) ( P )

    + - - - - - - - + + - - - - - - - - - - - - - - - - - + + - - - +

    N o w t h e r e a r e t w o m e d i u m b o w l s : o n e c o n t a i n s t w o a p p l e s a n d o n e p e a r ,

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

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

    1 . 2 L I S T S a n d A T O M S

    N o w w e a r e r e a d y f o r t h e b i g l e a p t o L I S P :

    T h e b a s i c d a t a o b j e c t s i n L I S P a r e L I S T S a n d A T O M S .

    L I S T S a r e l i k e B O W L S . L i k e b o w l s , l i s t s c a n b e e m p t y . L i k e b o w l s ,

    l i s t s c a n c o n t a i n o t h e r l i s t s . L i k e b o w l s , l i s t s c a n c o n t a i n t h i n g s t h a t

    a r e n o t c o n t a i n e r s .

    A T O M S a r e l i k e t h e t h i n g s p e o p l e s t o r e i n b o w l s .

    2

  • 7/29/2019 Lisp Tutorial Notes

    4/35

    F o r e x a m p l e ,

    O n e b o w l i n s i d e a n o t h e r i n s i d e a n o t h e r :

    ( ( ( ) ) )

    ( ( + - - - + ) )

    ( + - - - - - - - + )

    + - - - - - - - - - - - - - - - - - +

    O n e l i s t i n s i d e a n o t h e r i n s i d e a n o t h e r :

    ( ( ( ) ) )

    H e r e w e c a n s a y t h a t t h e i n s i d e l i s t i s e m p t y t h e e m p t y l i s t i s i n s i d e a n o t h e r

    l i s t t h e c o m b i n a t i o n i s , i n t u r n , i n s i d e s t i l l a n o t h e r l i s t .

    H e r e i s a b o w l s e t i n v o l v i n g t w o a p p l e s a n d a p e a r :

    ( ( ) )

    ( ( A A P ) ( ) )

    ( + - - - - - - - + + - - - + )

    + - - - - - - - - - - - - - - - - - +

    A n d h e r e a r e s o m e l i s t s :

    ( ( A A P ) ( ) )

    O n e l i s t i s e m p t y , j u s t a s o n e b o w l w a s . A n o t h e r l i s t c o n t a i n s t h r e e t h i n g s ,

    c a l l e d a t o m s , j u s t a s o n e b o w l c o n t a i n s t h r e e p i e c e s o f f r u i t . T h e r e i s a l i s t

    c o n t a i n i n g t w o l i s t s , j u s t a s t h e r e i s a b o w l c o n t a i n i n g t w o b o w l s .

    T h e s e c o n d e l e m e n t o f t h e f o l l o w i n g b i g l i s t i s a n e m p t y l i s t :

    ( ( A A P ) ( ) )

    |

    |

    ( ) a n e m p t y l i s t

    1 . 3 B a s i c D a t a T y p e s o f L I S P

    E v e r y e x p r e s s i o n i n L I S P i s e i t h e r a n a t o m o r a l i s t .

    I n d i v i s i b l e t h i n g s l i k e 2 7 , + , F I R S T , F O O , w h i c h h a v e o b v i o u s m e a n -

    i n g s a r e c a l l e d A T O M S .

    A t o m s l i k e 2 7 , 3 . 1 4 , e t c . a r e c a l l e d N U M E R I C A T O M S .

    A t o m s l i k e F I R S T , F O O , + , e t c . a r e c a l l e d S Y M B O L I C A T O M S .

    A l i s t c o n s i s t s o f a l e f t p a r e n t h e s i s , f o l l o w e d b y z e r o o r m o r e e l e m e n t s ,

    f o l l o w e d b y a r i g h t p a r e n t h e s i s :

    ( a b c ( d e ) )

    3

  • 7/29/2019 Lisp Tutorial Notes

    5/35

    E l e m e n t s o f a l i s t a r e s e p a r t e d b y s p a c e . L i s t s t h e m s e l v e s c a n b e

    e l e m e n t s o f a n o t h e r l i s t .

    B o t h a t o m s a n d l i s t s a r e c a l l e d S Y M B O L I C E X P R E S S I O N S .

    + - - n u m b e r

    |

    + - - a t o m +

    | |

    E x p r e s s i o n + + - - s y m b o l

    |

    + - - l i s t

    1 . 4 E x e r c i s e s :

    1 . A T O M a t o m

    2 . ( T H I S I S A N A T O M ) l i s t

    3 . ( ( A B ) ( C D ) ) 3 ( 3 ) n e i t h e r !

    4 . ( L I S T 3 ) l i s t

    5 . ( / ( + 3 1 ) ( - 3 1 ) ) l i s t

    6 . ( ) l i s t ( e m p t y l i s t o r N I L )

    7 . ( ( ) ( ) ) l i s t

    ( l i s t c o n t a i n i n g 2 e m p t y l i s t s )

    1 . 5 L I S P a s a n I n t e r p r e t e r

    W h e n L I S P i s r e s t i n g , d o i n g n o t h i n g , i t d i s p l a y s a P R O M P T s y m b o l ,

    n o r m a l l y a n a s t e r i s k , t o t e l l y o u t h a t L I S P i s w a i t i n g f o r y o u t o t y p e

    s o m e t h i n g .

    * I n d i c a t e s L I S P i s w a i t i n g f o r y o u t o t y p e .

    T h e w o r d s b e y o n d t h e s e m i c o l o n a r e C O M M E N T S .

    I t i s c o n v e n t i o n a l t o u s e t h e w o r d F O R M t o r e f e r t o a n y s y m b o l o r l i s t

    w h e n i t i s o b v i o u s t h a t t h e s y m b o l o r l i s t h a s a v a l u e .

    T h e p r o c e s s o f n d i n g t h e v a l u e i s c a l l e d E V A L U A T I O N .

    L I S P c a n r e a d p r o c e d u r e d e n i t i o n s a n d o t h e r i n f o r m a t i o n f r o m t h e d e s i g -

    n a t e d l e :

    * ( l o a d " c : \ \ l i s p \ \ m y p r o g . l s p " )

    T o e x i t f r o m L I S P :

    * ( e x i t )

    4

  • 7/29/2019 Lisp Tutorial Notes

    6/35

    2 I n t r o d u c t i o n t o L I S P P r i m i t i v e s

    P r o c e d u r e s t h a t c o m e w i t h L I S P a r e c a l l e d P R I M I T I V E S . T h u s t h e f o l l o w -

    i n g a r e a l l L I S P p r i m i t i v e s .

    P r i m i t i v e n a m e A c t i o n

    = = = = = = = = = = = = = = = = = = = =

    + A d d s n u m b e r s .

    - S u b t r a c t s n u m b e r s .

    * M u l t i p l i e s n u m b e r s .

    / D i v i d e s n u m b e r s .

    M A X F i n d s t h e l a r g e s t n u m b e r .

    M I N F i n d s t h e s m a l l e s t n u m b e r .

    F o r e x a m p l e ,

    * ( + 1 2 3 )

    6 L I S P r e t u r n s 6 b e c a u s e 1 + 2 + 3 = 6

    N o t e t h a t t h e p l u s s i g n c o m e s b e f o r e t h e n u m b e r s , n o t i n b e t w e e n | p r e x

    n o t a t i o n .

    I n L I S P , t h e s y m b o l t h a t n a m e s t h e t h i n g t o d o i s c a l l e d t h e P R O C E -

    D U R E N A M E .

    W h e n e v e r a l i s t i s u s e d t o s p e c i f y c o m p u t a t i o n , a p r o c e d u r e n a m e i s

    a l w a y s t h e r s t e l e m e n t o f t h e l i s t .

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

    a r e c a l l e d A R G U M E N T S .

    I n ( + 1 2 3 ) t h e P R O C E D U R E N A M E i s + .

    T h e A R G U M E N T S a r e 1 , 2 , a n d 3 .

    2 . 1 S o m e M o r e E x a m p l e s

    * ( M A X 3 6 9 1 6 9 5 )

    9

    * ( M I N 3 6 9 1 6 9 5 )

    1

    * ( + ( - 5 3 ) ( / 1 2 6 ) )

    4 0

    * ( * ( M A X 3 4 5 ) ( M I N 3 4 5 ) )

    1 5

    *

    A s s u m e t h a t w e h a v e d e n e P I t o b e 3 . 1 4 a n d s u p p o s e w e h a v e a c i r c l e w i t h

    a r a d i u s o f 3 .

    T h e n i t s c i r c u m f e r e n c e i s 2 x P I x 3 . T o g e t t h e r e s u l t u s i n g L I S P , t y p e t h i s :

    * ( * 2 P I 3 )

    1 8 . 8 4 2 x 3 . 1 4 x 3 = 1 8 . 8 4 .

    *

    5

  • 7/29/2019 Lisp Tutorial Notes

    7/35

    2 . 2 S E T F P r i m i t i v e

    A s s i g n a v a l u e t o a s y m b o l ( S E T F i e l d ) .

    R e t u r n s t h e 2 n d a r g u m e n t a s i t s v a l u e .

    S i d e E e c t : A s s i g n i n g t h e v a l u e o f i t s 2 n d a r g u m e n t t o i t s 1 s t a r g u -

    m e n t .

    F o r e x a m p l e , s u p p o s e w e w a n t t h e v a l u e o f E t o b e 2 . 7 2 . W e c a n d o t h i s a s

    f o l l o w s :

    * ( S E T F E 2 . 7 2 )

    2 . 7 2

    * E

    2 . 7 2

    *

    A n o t h e r e x a m p l e ,

    * ( S E T F a b - l i s t ' ( a b ) )

    ( A B )

    * a b - l i s t

    ( A B )

    * ( s e t f a b - l i s t ' ( c d e ) )

    ( C D E )

    * a b - l i s t

    ( C D E )

    *

    S E T F a c c e p t s m u l t i p l e s y m b o l - v a l u e p a i r s b u t o n l y t h e v a l u e o f t h e

    n a l a r g u m e n t i s r e t u r n e d .

    2 . 3 S o m e N o t e s o n L I S P P r i m i t i v e s

    N o t e t h a t :

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

    a s y m b o l . L I S P b i n d s s y m b o l s a s t h e y a r e e n c o u n t e r e d .

    A s s i g n m e n t i s s t o r i n g a v a l u e i n t h a t p l a c e ( u s i n g S E T F ) .

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

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

    c h a n g e o l d d a t a . C o n s e q u e n t l y , f o r a n y k i n d o f d a t a , t h e r e a r e t h r e e g r o u p s

    o f p r o c e d u r e s :

    N a m e o f p r o c e d u r e P u r p o s e

    = = = = = = = = = = = = = = = = = = = = = = = =

    C o n s t r u c t o r s C r e a t e n e w d a t a .

    S e l e c t o r s G e t a t o l d d a t a .

    M u t a t o r s C h a n g e o l d d a t a .

    6

  • 7/29/2019 Lisp Tutorial Notes

    8/35

    3 L i s t S e l e c t o r s

    T h e s e a r e t h e b a s i c l i s t s e l e c t o r s :

    S e l e c t o r P u r p o s e

    = = = = = = = = = = = = = = =

    F I R S T R e t u r n 1 s t e l e m e n t o f t h e l i s t .

    R E S T R e t u r n l i s t a f t e r r e m o v i n g t h e f i r s t e l e m e n t .

    L A S T R e t u r n l i s t a f t e r r e m o v i n g a l l b u t

    o n e e l e m e n t .

    B U T L A S T R e t u r n l i s t a f t e r r e m o v i n g t h e l a s t n

    e l e m e n t s o f a l i s t , w i t h t h e 2 n d a r g u m e n t

    d e t e r m i n g t h e e x a c t n u m b e r .

    N T H C D R R e t u r n l i s t a f t e r r e m o v i n g t h e f i r s t

    n e l e m e n t s o f a l i s t , w i t h t h e 1 s t a r g u m e n t

    d e t e r m i n i n g t h e e x a c t n u m b e r .

    L E N G T H R e t u r n t h e n u m b e r o f t o p - l e v e l e l e m e n t s

    i n a l i s t .

    F o r e x a m p l e ,

    * ( s e t f m y l i s t ' ( f a s t c o m p u t e r s a r e n i c e ) )

    ( F A S T C O M P U T E R S A R E N I C E )

    * ( f i r s t m y l i s t )

    F A S T

    * ( r e s t m y l i s t )

    ( C O M P U T E R S A R E N I C E )

    * ( l a s t m y l i s t )

    ( N I C E )

    * ( b u t l a s t m y l i s t 2 )

    ( F A S T C O M P U T E R S )

    * ( n t h c d r 2 m y l i s t )

    ( A R E N I C E )

    * ( l e n g t h m y l i s t )

    4

    *

    3 . 1 N o t e s o n L i s t S e l e c t o r s

    I n a d d i t i o n t o F I R S T , C o m m o n L I S P h a s S E C O N D a n d T H I R D b i g -

    g e r L I S P s h a v e e v e n m o r e .

    F I R S T , R E S T , a n d t h e o t h e r s e l e c t o r s c a n b e c o m b i n e d , j u s t a s a r i t h -

    m e t i c p r i m i t i v e s c a n b e .

    F o r e x a m p l e ,

    * ( F I R S T ( R E S T ' ( A B C ) ) )

    B

    *

    7

  • 7/29/2019 Lisp Tutorial Notes

    9/35

    L I S P e v a l u a t e s a p r o c e d u r e ' s a r g u m e n t s b e f o r e e v a l u a t i n g t h e p r o c e -

    d u r e i t s e l f .

    3 . 2 Q u o t i n g S t o p E v a l u a t i o n

    H o w c a n L I S P k n o w w h i c h i s a s p e c i c a t i o n o f f u n c t i o n c a l l a n d w h i c h i s a

    d a t a i t e m ?

    F o r e x a m p l e ,

    * ( r e s t ( a b c ) )

    ' a ' m a y b e s o m e s o r t o f u s e r - d e n e d f u n c t i o n ! S h o u l d L I S P e v a l u a t e i t o r

    s h o u l d i t j u s t r e g a r d i t a s d a t a ?

    Y o u c a n s p e c i f y w h e r e t o s t o p e v a l u a t i o n b y a d d i n g a s i n g l e - q u o t e

    c h a r a c t e r ' .

    E x p r e s s i o n a f t e r t h e q u o t e c h a r a c t e r , ' , w i l l b e r e g a r d e d a s d a t a a n d

    N O T b e e v a l u a t e d .

    F o r e x a m p l e ,

    * ( f i r s t ( r e s t ' ( a b c ) ) )

    B

    * ( f i r s t ' ( r e s t ( a b c ) ) )

    R E S T

    * ( s e t f L ' ( f i r s t ( r e s t ( a b c ) ) ) )

    ( F I R S T ( R E S T ( A B C ) ) )

    *

    A n o t h e r e x a m p l e ,

    * ( S E T F L ( P H W K A P D C B ) )

    E r r o r

    *

    T h e p r o b l e m i s t h a t P H W i s n o t a p r o c e d u r e n a m e , y e t P H W i s t h e s y m b o l

    i n t h e r s t , p r o c e d u r e - n a m e p o s i t i o n i n t h e f o r m t o b e e v a l u a t e d .

    3 . 3 E x e r c i s e s :

    1 . ( f i r s t ' ( p h w ) ) P

    2 . ( r e s t ' ( b k p h ) ) ( K P H )

    3 . ( f i r s t ' ( ( a b ) ( c d ) ) ) ( A B )

    4 . ( r e s t ' ( ( a b ) ( c d ) ) ) ( ( C D ) )

    5 . ( f i r s t ( r e s t ' ( ( a b ) ( c d ) ) ) ) ( C D )

    6 . ( r e s t ( f i r s t ' ( ( a b ) ( c d ) ) ) ) ( B )

    7 . ( r e s t ( f i r s t ( r e s t ' ( ( a b ) ( c d ) ) ) ) ) ( D )

    8 . ( f i r s t ( r e s t ( f i r s t ' ( ( a b ) ( c d ) ) ) ) ) B

    9 . ( r e s t ' ( c ) ) N I L

    8

  • 7/29/2019 Lisp Tutorial Notes

    10/35

    1 0 . ( f i r s t ( ) ) N I L

    1 1 . ( r e s t ( ) ) N I L

    1 2 . ( n t h c d r 2 ' ( a b c ) ) ( C )

    1 3 . ( b u t l a s t ' ( a b c ) ) ( A B )

    1 4 . ( l a s t ' ( a b c ) ) ( C )

    1 5 . ( l a s t ' ( ( a b ) ( c d ) ) ) ( ( C D ) )

    1 6 . ( n t h c d r 5 0 ' ( a b c ) ) N I L

    1 7 . ( b u t l a s t ' ( a b c ) 5 0 ) N I L

    1 8 . ( l a s t ( ) ) N I L

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

    * ( f i r s t ( l a s t ' ( a b c ) ) )

    C

    9

  • 7/29/2019 Lisp Tutorial Notes

    11/35

    4 L i s t C o n s t r u c t o r s

    T o p u t l i s t s t o g e t h e r , p r i m i t i v e s c a l l e d C O N S T R U C T O R S a r e u s e d .

    4 . 1 L i s t C o n s t r u c t o r s | C O N S t r u c t

    T a k e s a n e x p r e s s i o n a n d a l i s t a n d r e t u r n s a n e w l i s t w h o s e 1 s t e l e m e n t i s

    t h e e x p r e s s i o n a n d w h o s e r e m a i n i n g e l e m e n t s a r e t h o s e o f t h e o l d l i s t .

    F o r e x a m p l e ,

    + - - - - - +

    | |

    | v

    * ( C O N S ' A ' ( B C ) )

    ( A B C )

    A s s u m i n g L ' s v a l u e i s ( A B ) a n d

    M ' s v a l u e i s ( ( L M ) ( X Y ) ) , t h e n :

    + - - - - - - - - - +

    | |

    * ( C O N S L M ) | v

    ( ( A B ) ( L M ) ( X Y ) ) ( A B ) ( ( L M ) ( X Y ) )

    * ( c o n s L L )

    ( ( A B ) A B )

    * ( c o n s ' ( a ) ' ( b c ) )

    ( ( A ) B C )

    Y o u w i l l o f t e n c o m b i n e S E T F a n d C O N S t h i s w a y :

    ( S E T F < n a m e o f a l i s t >

    ( C O N S < n e w e l e m e n t > < n a m e o f t h e l i s t > ) )

    F o r e x a m p l e ,

    A s s u m i n g L ' s v a l u e i s ( Y Z ) .

    * ( S E T F L ( C O N S ' X L ) )

    ( X Y Z )

    * L

    ( X Y Z )

    N o t e t h a t L ' s O L D v a l u e i s f o u n d , t h e n t h e C O N S m a k e s a N E W l i s t , a n d

    t h e n S E T F a t t a c h e s t h e N E W l i s t t o t h e s a m e s y m b o l , L :

    W i t h o u t S E T F , L ' s v a l u e i s n o t c h a n g e d a f t e r C O N S :

    * ( C O N S ' X L )

    ( X Y Z )

    * L

    ( Y Z )

    1 0

  • 7/29/2019 Lisp Tutorial Notes

    12/35

    4 . 2 L i s t C o n s t r u c t o r s | A P P E N D

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

    F o r e x a m p l e ,

    * ( A P P E N D ' ( A B C ) ' ( X Y Z ) )

    | | | | | |

    | | | | | |

    v v v v v v

    ( A B C X Y Z )

    C o m p a r e t h e r e s u l t w i t h w h a t y o u w o u l d g e t w i t h C O N S :

    * ( C O N S ' ( A B C ) ' ( X Y Z ) )

    ( ( A B C ) X Y Z )

    A P P E N D m a k e s a l i s t o u t o f a l l t h e e l e m e n t s i n i t s a r g u m e n t s .

    C O N S a d d s i t s r s t a r g u m e n t t o i t s s e c o n d a r g u m e n t , a l i s t .

    A n o t h e r e x a m p l e ,

    * ( c o n s ' ( a b c ) ' ( ) )

    ( ( A B C ) )

    * ( a p p e n d ' ( a b c ) ' ( ) )

    ( A B C )

    * ( a p p e n d ' ( a b c ) ' ( ( ) ) )

    ( A B C N I L )

    4 . 3 L i s t C o n s t r u c t o r s | L I S T

    M a k e a l i s t o u t o f i t s a r g u m e n t s . E a c h \ a r g u m e n t v a l u e " b e c o m e s a n e l e m e n t

    o f t h e n e w l i s t .

    F o r e x a m p l e ,

    * ( L I S T ' A ' B ' C )

    ( A B C )

    * ( l i s t ' a ' b ' ( c d ) )

    ( A B ( C D ) )

    A S S U M I N G P I ' s v a l u e i s 3 . 1 4 ,

    * ( l i s t 2 P I 3 )

    ( 2 3 . 1 4 3 )

    * ( l i s t 2 ' P I 3 )

    ( 2 P I 3 )

    A n o t h e r e x a m p l e ,

    * ( s e t f o b s t a c l e s ( l i s t ' o n e ' t w o ) )

    ( O N E T W O )

    * o b s t a c l e s

    ( O N E T W O )

    1 1

  • 7/29/2019 Lisp Tutorial Notes

    13/35

    4 . 4 L i s t C o n s t r u c t o r s | R E V E R S E

    R e v e r s e t h e o r d e r o f t h e t o p - l e v e l e l e m e n t s o f a l i s t .

    F o r e x a m p l e ,

    * ( R E V E R S E ' ( A B C ) )

    ( C B A )

    N o t e , h o w e v e r , t h a t R E V E R S E d o e s n o t t u r n t h e i n d i v i d u a l e l e m e n t s o f a

    l i s t a r o u n d w h e n t h o s e e l e m e n t s a r e l i s t s :

    F o r e x a m p l e ,

    * ( R E V E R S E ' ( ( A B ) ( L M ) ( X Y ) ) )

    ( ( X Y ) ( L M ) ( A B ) )

    4 . 5 E x e r c i s e s :

    1 . ( c o n s ' ( a b c ) ' ( ) ) ( ( A B C ) )

    2 . ( a p p e n d ' ( a b c ) ' ( ) ) ( A B C )

    3 . ( l i s t ' ( a b c ) ' ( ) ) ( ( A B C ) N I L )

    A s s u m e L ' s v a l u e i s ( A B C ) , M ' s v a l u e i s ( X Y Z )

    4 . ( l i s t L M ) ( ( A B C ) ( X Y Z ) )

    5 . ( l i s t ' L M ) ( L ( X Y Z ) )

    6 . ( l i s t L ' M ) ( ( A B C ) M )

    7 . ( a p p e n d L M ) ( A B C X Y Z )

    8 . * ( s e t f M ( c o n s ' t h i s ( s e t f L ' ( i s a l i s t ) ) ) )

    ( T H I S I S A L I S T )

    * L

    ( I S A L I S T )

    * M

    ( T H I S I S A L I S T )

    * ( c o n s L L )

    ( ( I S A L I S T ) I S A L I S T )

    * ( l i s t L L )

    ( ( I S A L I S T ) ( I S A L I S T ) )

    * ( a p p e n d L L )

    ( I S A L I S T I S A L I S T )

    9 . ( r e v e r s e ' ( a b c ) ) ( C B A )

    1 0 . ( r e v e r s e ' ( ( a ) ( b ) ( c ) ) ) ( ( C ) ( B ) ( A ) )

    1 1 . ( r e v e r s e ' ( ( a b c ) ) ) ( ( A B C ) )

    1 2

  • 7/29/2019 Lisp Tutorial Notes

    14/35

    5 P r o c e d u r e D e n i t i o n a n d B i n d i n g

    5 . 1 P r o c e d u r e D e n i t i o n a n d B i n d i n g | D E F U N

    L I S P e n c o u r a g e s y o u t o c r e a t e s m a l l , e a s i l y d e b u g g e d p r o c e d u r e s .

    D E F U N ; ! D E n e F U N c t i o n

    ( d e f u n < f u n c t i o n n a m e >

    ( < p a r a m e t e r s > )

    < f o r m s > )

    T h e D E F U N f u n c t i o n e s t a b l i s h e s a f u n c t i o n d e n i t i o n a s i t s s i d e - e e c t .

    T h e v a l u e r e t u r n e d b y D E F U N i s t h e f u n c t i o n n a m e .

    F o r e x a m p l e ,

    S u p p o s e y o u w a n t t o m a k e a n e w l i s t o u t o f t h e r s t a n d l a s t e l e m e n t s o f

    a n o l d l i s t .

    * ( D E F U N B O T H - E N D S P r o c e d u r e ' s n a m e i s B O T H - E N D S .

    ( L ) T h e p a r a m e t e r i s L .

    ( C O N S ( F I R S T L ) ( L A S T L ) ) T h e f o r m .

    ) E n d t h e D E F U N p r i m i t i v e

    B O T H - E N D S L I S P r e t u r n s t h e f u n c t i o n n a m e

    * ( B O T H - E N D S ' ( A B C D E ) )

    ( A E )

    * ( B O T H - E N D S ' ( S T A R T L M N F I N I S H ) )

    ( S T A R T F I N I S H )

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

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

    F o r e x a m p l e ,

    * ( d e f u n c o n s - t a i l ( t a i l a l i s t ) f c n n a m e , p a r a m e t e r s

    ( s e t f c o u n t ( + c o u n t 1 ) ) f i r s t f o r m

    ( a p p e n d a l i s t ( l i s t t a i l ) ) ) l a s t f o r m

    C O N S - T A I L

    * ( c o n s - t a i l ' p e a r ' ( a p p l e o r a n g e ) )

    ( A P P L E O R A N G E P E A R )

    V i r t u a l ' f e n c e s ' b e t w e e n v a r i a b l e s i n s i d e a n d o u t s i d e a f u n c t i o n .

    P A R A M E T E R V A R I A B L E S b i n d i n g s a r e e s t a b l i s h e d w h e n a f u n c t i o n

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

    f u n c t i o n .

    F o r e x a m p l e ,

    1 3

  • 7/29/2019 Lisp Tutorial Notes

    15/35

    * ( s e t f L ' ( a b c ) )

    ( A B C )

    * ( d e f u n b o t h - e n d s ( L )

    ( c o n s ( f i r s t L ) ( l a s t L ) ) )

    B O T H - E N D S

    * ( b o t h - e n d s ' ( d e f ) )

    ( D F )

    * L

    ( A B C )

    N O N - P A R A M E T E R v a r i a b l e s a r e n o t i s o l a t e d f r o m v a r i a b l e s o u t s i d e

    t h e f u n c t i o n .

    F o r e x a m p l e ,

    * ( s e t f c o u n t 0 )

    0

    * ( d e f u n c o n s - t a i l ( t a i l a l i s t )

    ( s e t f c o u n t ( + c o u n t 1 ) )

    ( a p p e n d a l i s t ( l i s t t a i l ) ) )

    C O N S - T A I L

    * ( c o n s - t a i l ' a ' ( b c ) )

    ( B C A )

    * c o u n t

    1

    5 . 2 P r o c e d u r e D e n i t i o n a n d B i n d i n g | L E T

    ( L E T ( ( < p a r a m e t e r 1 > < i n i t i a l v a l u e 1 > )

    ( < p a r a m e t e r 2 > < i n i t i a l v a l u e 2 > )

    ( < p a r a m e t e r m > < i n i t i a l v a l u e m > ) )

    < f o r m 1 >

    < f o r m 2 >

    < f o r m n > )

    T h e L E T f u n c t i o n b i n d s p a r a m e t e r s ( a n d a s s i g n s v a l u e s t o t h e m ) a n d

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

    v a l u e s a r e v a l i d .

    F o r e x a m p l e ,

    * ( L E T ( ( X 3 ) ( Y 5 ) )

    ( * X Y ) )

    1 5

    T h e ' p a r a m e t e r ' b i n d i n g s w i t h i n L E T f o r m a r e a l s o i s o l a t e d f r o m t h e

    o u t s i d e b y a v i r t u a l ' f e n c e ' , j u s t l i k e t h e l o c a l v a r i a b l e s i n a p r o c e d u r e

    o f P a s c a l . A g a i n , t h e n o n - p a r a m e t e r v a r i a b l e s w i t h i n a L E T f o r m i s

    n o t i s o l a t e d .

    1 4

  • 7/29/2019 Lisp Tutorial Notes

    16/35

    W h e n e v e r a L E T f o r m a p p e a r s i n a f u n c t i o n , t h e v i r t u a l f e n c e o f t h e

    L E T f o r m o c c u r s w i t h i n t h e v i r t u a l f e n c e o f t h e f u n c t i o n .

    + - - - F u n c t i o n ' s V i r t u a l F e n c e - - - - - - - - - +

    | |

    | + - - L E T ' s V i r u t a l F e n c e - - - - - - + |

    | | | |

    | + - - - - - - - - - - - - - - - - - - - - - - - - - - - + |

    + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

    F o r e x a m p l e ,

    * ( d e f u n t e s t 1 ( )

    ( s e t f a c c 0 )

    ( l e t ( ( x 1 ) ( y 2 ) )

    ( s e t f a c c ( + x y ) ) ) )

    * ( d e f u n t e s t 2 ( )

    ( s e t f a c c 0 )

    ( l e t ( ( x 1 ) ( y 2 ) ( a c c 0 ) )

    ( s e t f a c c ( + x y ) ) ) )

    * ( t e s t 1 ) * ( t e s t 2 )

    3 3

    * a c c * a c c

    3 0

    N o t e c a r e f u l l y t h a t a l l i n i t i a l - v a l u e f o r m s a r e e v a l u a t e d b e f o r e t h e n e w p a -

    r a m e t e r v a l u e s a r e a s s i g n e d .

    T h e s e f o r m s a r e A L L e v a l u a t e d ,

    |

    |

    ( L E T ( ( < p a r a m e t e r 1 > < v a l u e 1 > )

    ( < p a r a m e t e r n > < v a l u e n > ) )

    |

    + - - - - - b e f o r e A N Y o f t h e s e p a r a m e t e r s a r e s e t .

    < f o r m 1 > . . . < f o r m n > )

    W e s a y t h a t t h e L E T p a r a m e t e r v a l u e s a r e c o m p u t e d i n P A R A L L E L .

    * ( s e t f x ' o u t s i d e )

    * ( l e t ( ( x ' i n s i d e ) ( y x ) )

    ( l i s t x y ) )

    ( I N S I D E O U T S I D E )

    1 5

  • 7/29/2019 Lisp Tutorial Notes

    17/35

    L E T *

    L E T * b i n d s p a r a m e t e r s e q u e n t i a l l y s o t h a t a p a r a m e t e r b o u n d e a r l i e r c a n

    b e u s e d t o e v a l u a t e t h e v a l u e o f a p a r a m e t e r b o u n d l a t e r .

    F o r e x a m p l e ,

    * ( s e t f x ' o u t s i d e )

    * ( l e t * ( ( x ' i n s i d e ) ( y x ) )

    ( l i s t x y ) )

    ( I N S I D E I N S I D E )

    1 6

  • 7/29/2019 Lisp Tutorial Notes

    18/35

    6 P r e d i c a t e s a n d C o n d i t i o n a l s

    A p r e d i c a t e i s a p r o c e d u r e t h a t r e t u r n s a v a l u e t h a t i s e i t h e r t r u e ( T ) o r

    f a l s e ( N I L ) .

    6 . 1 E q u a l i t y P r e d i c a t e s

    E Q U A L A r e t h e 2 a r g u m e n t s t h e s a m e e x p r ( l i s t o r a t o m ) ?

    E Q L A r e t h e 2 a r g u m e n t s t h e s a m e s y m b o l o r n u m b e r ?

    E Q A r e t h e 2 a r g u m e n t s t h e s a m e s y m b o l ?

    = A r e t h e 2 a r g u m e n t s t h e s a m e n u m b e r ?

    F o r e x a m p l e ,

    * ( s e t f a b c - l i s t ' ( a b c )

    o n e 1 t w o 2 p l u s ' + m i n u s ' - )

    -

    * ( e q u a l a b c - l i s t ' ( a b c ) )

    T

    * ( e q u a l o n e 2 )

    N I L

    * ( e q u a l a b c - l i s t o n e )

    N I L

    * ( e q u a l p l u s m i n u s )

    N I L

    * ( e q l p l u s ' + )

    T

    * ( e q m i n u s - 1 )

    E R R O R < - - - - " E Q " e x p e c t s s y m b o l s

    * ( = o n e ' a )

    E R R O R < - - - - " = " e x p e c t s n u m b e r s

    * ( e q l 4 4 . 0 )

    N I L

    * ( e q l 4 4 )

    T

    * ( = 4 4 . 0 )

    T

    6 . 2 M e m b e r s h i p P r e d i c a t e

    T h e M E M B E R p r e d i c a t e t e s t t o s e e i f i t s 1 s t a r g u m e n t i s a n ( t o p l e v e l )

    e l e m e n t o f i t s 2 n d a r g u m e n t .

    M E M B E R r e t u r n s w h a t i s l e f t i n t h e l i s t w h e n t h e m a t c h i n g s y m b o l

    i s e n c o u n t e r e d .

    M E M B E R r e t u r n s N I L i f t h e 1 s t a r g u m e n t i s n o t a t o p l e v e l e l e m e n t

    o f t h e 2 n d e l e m e n t .

    1 7

  • 7/29/2019 Lisp Tutorial Notes

    19/35

    F o r e x a m p l e ,

    * ( s e t f s e n t e n c e ' ( t e l l m e a b o u t y o u r m o t h e r p l e a s e ) )

    ( t e l l m e a b o u t y o u r m o t h e r p l e a s e )

    * ( m e m b e r ' m o t h e r s e n t e n c e )

    ( M O T H E R P L E A S E ) < - - - a m o r e i n f o r m a t i v e r e t u r n v a l u e

    i n s t e a d o f j u s t a " T " .

    * ( m e m b e r ' f a t h e r s e n t e n c e )

    N I L

    * ( M E M B E R ' M O T H E R ' ( ( F A T H E R S O N ) ( M O T H E R D A U G H T E R ) ) )

    N I L

    M E M B E R n o r m a l l y t e s t s t h i n g s w i t h a p r e d i c a t e t h a t w o r k s w i t h s y m b o l s

    o n l y . I f t h e r s t a r g u m e n t t o M E M B E R i s n o t a s y m b o l , y o u m u s t m o d i f y

    s l i g h t l y w h a t y o u w r i t e o t h e r w i s e M E M B E R w o n ' t w o r k a s y o u e x p e c t .

    * ( S E T F P A I R S ' ( ( F A T H E R S O N ) ( M O T H E R D A U G H T E R ) ) )

    ( ( F A T H E R S O N ) ( M O T H E R D A U G H T E R ) )

    * ( m e m b e r ' ( f a t h e r s o n ) p a i r s )

    N I L

    * ( M E M B E R ' ( F A T H E R S O N ) P A I R S : T E S T ' E Q U A L )

    T

    6 . 3 D a t a T y p e s P r e d i c a t e s

    A T O M I s i t a n a t o m ?

    N U M B E R P I s i t a n u m b e r ?

    S Y M B O L P I s i t a s y m b o l ?

    L I S T P I s i t a l i s t ?

    F o r e x a m p l e ,

    * ( a t o m ' p i )

    T

    * ( a t o m p i )

    T

    * ( n u m b e r p ' p i )

    N I L

    * ( n u m b e r p p i )

    T

    * ( s y m b o l p ' p i )

    T

    * ( s y m b o l p p i )

    N I L

    * ( a t o m n i l )

    T

    * ( a t o m ( ) )

    T

    * ( s y m b o l p n i l )

    1 8

  • 7/29/2019 Lisp Tutorial Notes

    20/35

    T

    * ( s y m b o l p ( ) )

    T

    * ( l i s t p n i l )

    T

    * ( l i s t p ( ) )

    T

    * ( n u m b e r p ( ) )

    N I L

    6 . 4 E m p t y - L i s t P r e d i c a t e s

    N U L L I s t h e a r g u m e n t a n e m p t y l i s t ?

    E N D P I s t h e a r g u m e n t , w h i c h m u s t b e a l i s t ,

    a n e m p t y l i s t ?

    F o r E x a m p l e ,

    * ( n u l l ( ) )

    T

    * ( e n d p n i l )

    T

    * ( n u l l ' ( a b c ) )

    N I L

    * ( e n d p ' ( a b c ) )

    N I L

    * ( n u l l ' a - s y m b o l )

    N I L

    * ( e n d p ' a - s y m b o l )

    E R R O R < - - - a - s y m b o l i s n o t a l i s t

    6 . 5 N u m b e r P r e d i c a t e s

    N U M B E R P I s i t a n u m b e r ?

    Z E R O P I s i t z e r o ?

    P L U S P I s i t p o s i t i v e ?

    M I N U S P I s i t n e g a t i v e ?

    E V E N P I s i t e v e n ?

    O D D P I s i t o d d ?

    > A r e t h e y i n d e s c e n d i n g o r d e r ?

    < A r e t h e y i n a s c e n d i n g o r d e r ?

    F o r e x a m p l e ,

    * ( s e t f z e r o 0 o n e 1 t w o 2 t h r e e 3 f o u r 4 )

    * ( s e t f d i g i t s ( l i s t o n e t w o t h r e e f o u r ) )

    * ( n u m b e r p 4 )

    1 9

  • 7/29/2019 Lisp Tutorial Notes

    21/35

    T

    * ( n u m b e r p f o u r )

    T

    * ( n u m b e r p ' f o u r )

    N I L

    * ( n u m b e r p d i g i t s )

    N I L

    * ( n u m b e r p ' d i g i t s )

    N I L

    * ( z e r o p z e r o )

    T

    * ( z e r o p ' z e r o )

    E R R O R < - - - - - - z e r o p e x p e c t s a n u m b e r

    * ( z e r o p f o u r )

    N I L

    F u r t h e r e x a m p l e s ,

    * ( p l u s p o n e )

    T

    * ( p l u s p ( - o n e ) )

    N I L

    * ( p l u s p z e r o )

    N I L

    * ( e v e n p ( * 9 5 3 2 1 ) )

    T

    * ( e v e n p ( * 1 0 8 6 4 2 ) )

    T

    * ( > f o u r t w o )

    T

    * ( > t w o f o u r )

    N I L

    * ( > t h r e e t w o o n e )

    T

    * ( > t h r e e o n e t w o )

    N I L

    * ( > ' f o u r ' t w o )

    E R R O R < - - - - - - n o t n u m b e r s

    6 . 6 C o m b i n i n g P r e d i c a t e s | A N D

    A N D r e t u r n s N I L i f a n y o f i t s a r g u m e n t e v a l u a t e s t o N I L .

    T h e a r g u m e n t s a r e e v a l u a t e d f r o m l e f t - t o - r i g h t , i f a n y e v a l u a t e s t o

    N I L , n o n e o f t h e r e m a i n i n g i s e v a l u a t e d , a n d t h e v a l u e r e t u r n e d i s

    N I L .

    I f a l l a r g u m e n t s e v a l u a t e t o n o n - N I L v a l u e s , t h e v a l u e r e t u r n e d b y t h e

    A N D f r o m i s t h e v a l u e o f t h e l a s t a r g u m e n t .

    2 0

  • 7/29/2019 Lisp Tutorial Notes

    22/35

    I t t a k e s a n y n u m b e r o f a r g u m e n t s .

    F o r e x a m p l e ,

    * ( s e t f p e t s ' ( d o g c a t ) )

    * ( a n d ( m e m b e r ' d o g p e t s ) ( m e m b e r ' t i g e r p e t s ) )

    N I L

    * ( a n d ( m e m b e r ' d o g p e t s ) ( m e m b e r ' c a t p e t s ) )

    ( C A T )

    T h i n g s a r e n o t t h a t s i m p l e , h o w e v e r , b e c a u s e A N D m a y n o t e v a l u a t e a l l

    t h e i r a r g u m e n t s .

    * ( s e t f r e s u l t N I L p i 3 . 1 4 )

    3 . 1 4

    * ( A N D ( L I S T P P I ) ( S E T F R E S U L T ' S E T - I N - F I R S T - A N D ) )

    N I L R e t u r n s N I L b e c a u s e P I i s n o t a l i s t .

    * R E S U L T

    N I L

    * ( A N D ( N U M B E R P P I ) ( S E T F R E S U L T ' S E T - I N - S E C O N D - A N D ) )

    S E T - I N - S E C O N D - A N D

    * R E S U L T

    S E T - I N - S E C O N D - A N D

    6 . 7 C o m b i n i n g P r e d i c a t e s | O R

    O R r e t u r n s N I L i f a l l o f i t s a r g u m e n t s e v a l u a t e s t o N I L .

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

    n o n - N I L , n o n e o f t h e r e m a i n i n g i s e v a l u a t e d , a n d t h e v a l u e r e t u r n e d

    i s t h a t n o n - N I L v a l u e .

    I f a l l a r g u m e n t s e v a l u a t e s t o N I L , t h e v a l u e r e t u r n e d b y O R i s N I L .

    I t t a k e s a n y n u m b e r o f a r g u m e n t s .

    F o r e x a m p l e ,

    * ( s e t f p e t s ' ( d o g c a t ) )

    * ( o r ( m e m b e r ' d i n g o p e t s ) ( m e m b e r ' t i g e r p e t s ) )

    N I L

    * ( o r ( m e m b e r ' d o g p e t s ) ( m e m b e r ' c a t p e t s ) )

    ( D O G C A T )

    T h i n g s a r e n o t t h a t s i m p l e , h o w e v e r , b e c a u s e O R m a y n o t e v a l u a t e a l l t h e i r

    a r g u m e n t s .

    2 1

  • 7/29/2019 Lisp Tutorial Notes

    23/35

    * ( s e t f r e s u l t N I L p i 3 . 1 4 )

    3 . 1 4

    * ( O R ( N U M B E R P P I ) ( S E T F R E S U L T ' S E T - I N - F I R S T - O R ) )

    T

    * R E S U L T

    N I L

    * ( O R ( L I S T P P I ) ( S E T F R E S U L T ' S E T - I N - S E C O N D - O R ) )

    S E T - I N - S E C O N D - O R

    * R E S U L T

    S E T - I N - S E C O N D - O R

    6 . 8 C o m b i n i n g P r e d i c a t e s | N O T

    N O T j u s t t u r n s n o n - N I L t o N I L a n d N I L t o T

    F o r e x a m p l e ,

    * ( n o t ' d o g )

    N I L

    * ( s e t f p e t s ' ( d o g c a t ) )

    ( D O G C A T )

    * ( n o t ( m e m b e r ' d o g p e t s ) )

    N I L

    * ( n o t ( m e m b e r ' t i g e r p e t s ) )

    T

    2 2

  • 7/29/2019 Lisp Tutorial Notes

    24/35

    7 S i m p l e B r a n c h i n g P r i m i t i v e s

    7 . 1 S i m p l e B r a n c h i n g P r i m i t i v e s | I F

    ( I F < t e s t > < t h e n f o r m > < e l s e f o r m > )

    I F r e t u r n s t h e v a l u e o f i t s w h e n e v a l u a t e s t o T o r

    A N Y T H I N G o t h e r t h a n N I L o t h e r w i s e , I F r e t u r n s t h e v a l u e o f i t s

    F o r e x a m p l e ,

    A s s u m i n g T R I G G E R ' S v a l u e i s T .

    * ( I F T R I G G E R ' I T S - T R U E ' I T S - F A L S E )

    I T S - T R U E

    N o w a s s u m e T R I G G E R ' s v a l u e i s N I L :

    * ( I F T R I G G E R ' I T S - T R U E ' I T S - F A L S E )

    I T S - F A L S E

    A n o t h e r e x a m p l e ,

    * ( s e t f d a y - o r - d a t e ' m o n d a y )

    * ( i f ( s y m b o l p d a y - o r - d a t e ) ' d a y ' d a t e )

    D A Y

    * ( s e t f d a y - o r - d a t e 9 )

    * ( i f ( s y m b o l p d a y - o r - d a t e ) ' d a y ' d a t e )

    D A T E

    I f t h e r e ' s n o a n d i f e v a l u a t e s t o N I L , N I L w i l l b e r e -

    t u r n e d .

    7 . 2 S i m p l e B r a n c h i n g P r i m i t i v e s | W H E N

    ( W H E N < t e s t > < t h e n f o r m > )

    W H E N r e t u r n s t h e v a l u e o f w h e n e v a l u a t e s t o A N Y -

    T H I N G o t h e r t h a n N I L . S a i d a n o t h e r w a y , W H E N t r i g g e r s o n n o n - N I L .

    F o r e x a m p l e ,

    * ( W H E N T ' I T S - T R U E )

    I T S - T R U E

    W h e n W H E N ' s r s t a r g u m e n t e v a l u a t e s t o N I L , W H E N r e t u r n s n i l :

    2 3

  • 7/29/2019 Lisp Tutorial Notes

    25/35

    * ( W H E N N I L ' I T S - T R U E )

    N I L

    A n o t h e r E x a m p l e ,

    * ( s e t f h i g h 9 8 t e m p e r a t u r e 1 0 2 )

    * ( w h e n ( > t e m p e r a t u r e h i g h ) ( s e t f h i g h t e m p e r a t u r e ) )

    1 0 2

    * h i g h

    1 0 2

    7 . 3 S i m p l e B r a n c h i n g P r i m i t i v e s | U N L E S S

    ( U N L E S S < t e s t > < e l s e f o r m > )

    U N L E S S r e t u r n s t h e v a l u e o f w h e n e v a l u a t e s t o N I L .

    S a i d a n o t h e r w a y , U N L E S S t r i g g e r s o n s e e i n g N I L .

    F o r e x a m p l e ,

    * ( U N L E S S N I L ' I T S - F A L S E )

    I T S - F A L S E

    W h e n U N L E S S ' s r s t a r g u m e n t e v a l u a t e s t o n o n - N I L , U N L E S S r e t u r n s

    N I L :

    * ( U N L E S S N I L ' I T S - F A L S E )

    * ( U N L E S S T ' I T S - F A L S E )

    N I L

    A n o t h e r e x a m p l e ,

    * ( s e t f h i g h 9 8 t e m p e r a t u r e 1 0 2 )

    * ( u n l e s s ( < t e m p e r a t u r e h i g h ) ( s e t f h i g h t e m p e r a t u r e ) )

    1 0 2

    * h i g h

    1 0 2

    2 4

  • 7/29/2019 Lisp Tutorial Notes

    26/35

    8 G e n e r a l B r a n c h i n g P r i m i t i v e s

    8 . 1 G e n e r a l B r a n c h i n g P r i m i t i v e s | C O N D

    ( C O N D ( < t e s t 1 > < c o n s e q u e n t 1 - 1 > < c o n s e q u e n t 1 - 2 > . . . )

    ( < t e s t 2 ) < c o n s e q u e n t 2 - 1 > < c o n s e q u e n t 2 - 2 > . . . )

    ( < t e s t m > < c o n s e q u e n t m - 1 > < c o n s e q u e n t m - 2 > . . . ) )

    T h e s y m b o l C O N D i s f o l l o w e d b y c l a u s e s . E a c h c l a u s e c o n t a i n s a t e s t

    a n d z e r o o r m o r e f o r m s c a l l e d c o n s e q u e n t .

    C O N D m o v e s t h r o u g h t h e c l a u s e s , e v a l u a t i n g t h e t e s t f o r m s , u n t i l

    a t e s t f o r m e v a l u a t e s t o n o n - N I L . T h i s c l a u s e i s " t r i g g e r e d " a n d i t s

    c o n s e q u e n t f o r m s a r e e v a l u a t e d .

    T h e v a l u e r e t u r n e d b y C O N D i s t h e v a l u e o f t h e l a s t c o n s e q u e n t f o r m

    i n t h e t r i g g e r e d c l a u s e .

    I f a l l t e s t f o r m s a r e N I L , t h e v a l u e r e t u r n e d b y C O N D i s a l s o N I L .

    F o r e x a m p l e ,

    * ( c o n d ( ( = N 0 ) ( s e t f a n s w e r ' ( v a l u e i s z e r o ) ) )

    ( ( > N 1 ) ( s e t f a n s w e r ' ( v a l u e i s p o s i t i v e ) ) )

    ( T ( s e t f a n s w e r ' ( v a l u e i s n e g a t i v e ) ) ) )

    T h e l a s t c l a u s e i n t h e a b o v e e x a m p l e i s c a l l e d a T - t r i g g e r e d c l a u s e .

    W i t h a T - t r i g g e r e d c l a u s e , t h e n a l c l a u s e i s u s e d w h e n n o n e o f t h e

    o t h e r s a r e t r i g g e r e d .

    8 . 2 G e n e r a l B r a n c h i n g P r i m i t i v e s | C A S E

    ( C A S E < k e y f o r m >

    ( < k e y 1 > < c o n s e q u e n t 1 - 1 > < c o n s e q u e n t 1 - 2 > . . . )

    ( < k e y 2 > < c o n s e q u e n t 2 - 1 > < c o n s e q u e n t 2 - 2 > . . . )

    ( < k e y m > < c o n s e q u e n t m - 1 > < c o n s e q u e n t m - 2 ) . . . ) )

    C A S E c h e c k s t h e a g a i n s t t h e i n e a c h c l a u s e u s i n g

    " E Q L " u n t i l a m a t c h i n g i s f o u n d . T h e c o r r e s p o n d i n g c l a u s e i s t h e n

    t r i g g e r e d a n d a l l i t s c o n s e q u e n t a r e e v a l u a t e d .

    T h e v a l u e r e t u r n e d b y C A S E i s t h e v a l u e o f t h e l a s t c o n s e q u e n t f o r m

    i n t h e t r i g g e r e d c l a u s e .

    I f n o m a t c h i n g o c c u r s , t h e v a l u e r e t u r n e d b y C A S E i s N I L .

    2 5

  • 7/29/2019 Lisp Tutorial Notes

    27/35

    F o r e x a m p l e ,

    * ( s e t f t h i n g ' p o i n t r 1 )

    * ( c a s e t h i n g

    ( c i r c l e ( * p i r ) )

    ( s p h e r e ( * 4 p i r r )

    ( o t h e r w i s e 0 ) )

    0

    T h e l a s t c l a u s e i n t h e a b o v e e x a m p l e i s c a l l e d a C a t c h - a l l c l a u s e .

    W i t h a C a t c h - a l l c l a u s e , t h e n a l c l a u s e i s u s e d w h e n n o n e o f t h e

    o t h e r s a r e t r i g g e r e d .

    I f t h e i n a c l a u s e i s a l i s t , n o t a n a t o m , C A S E c h e c k s t h e a g a i n s t t h e l i s t u s i n g M E M B E R

    F o r e x a m p l e ,

    * ( s e t f t h i n g ' b a l l r 1 )

    * ( c a s e t h i n g

    ( ( c i r c l e w h e e l ) ( * p i r r ) )

    ( ( s p h e r e b a l l ) ( * 4 p i r r ) )

    ( o t h e r w i s e 0 ) )

    1 2 . 5 6 6

    2 6

  • 7/29/2019 Lisp Tutorial Notes

    28/35

    9 R e p e a t i n g b y R e c u r s i o n

    M a n y L I S P p r o c e d u r e s w o r k b y r e p e a t i n g a p a r t i c u l a r a c t i o n o v e r a n d o v e r

    u n t i l a c e r t a i n c o n d i t i o n i s m e t . T h e r e a r e s e v e r a l w a y s t h a t t h i s i s a r r a n g e d :

    + - - - R e c u r s i o n

    T o r e p e a t - - - - - | + - - - U s i n g D O

    + - - - I t e r a t i o n - - - - |

    + - - - U s i n g M A P C A R

    A n e x a m p l e f o r r e c u r s i o n :

    ( D E F U N C O U N T - E L E M E N T S ( L )

    ( I F ( E N D P L ) 0

    ( + 1 ( C O U N T - E L E M E N T S ( R E S T L ) ) ) ) )

    T h e d e n i t i o n o f C O U N T - E L E M E N T S i n v o l v e s a f o r m u s i n g C O U N T -

    E L E M E N T S i t s e l f . S u c h p r o c e d u r e s a r e s a i d t o b e R E C U R S I V E .

    M a n y r e c u r s i v e p r o c e d u r e s s o l v e p r o b l e m s b y b r e a k i n g u p a l i s t , w o r k i n g

    o n i t s p i e c e s , a n d c o m b i n i n g t h e r e s u l t s o f w o r k i n g o n t h o s e p i e c e s . O n e

    p a r t i c u l a r l y n i c e e x a m p l e i s C O U N T - A T O M S :

    F o r e x a m p l e ,

    ( D E F U N C O U N T - A T O M S ( E )

    ( C O N D ( ( A N D ( L I S T P E ) ( E N D P E ) ) 0 )

    ( ( A T O M E ) 1 )

    ( T ( + ( C O U N T - A T O M S ( F I R S T E ) )

    ( C O U N T - A T O M S ( R E S T E ) ) ) ) ) )

    2 7

  • 7/29/2019 Lisp Tutorial Notes

    29/35

    1 0 R e p e a t i n g b y I t e r a t i o n

    Y o u w i l l o f t e n w a n t t o d o a c o m p u t a t i o n o v e r a n d o v e r u n t i l o n e o f t h e t w o

    f o l l o w i n g c r i t e r i a i s s a t i s e d :

    1 . A t e s t h a s b e e n s a t i s e d .

    2 . A l l e l e m e n t s i n a l i s t h a v e b e e n w o r k e d o n .

    L e t ' s s t a r t w i t h D O s .

    1 0 . 1 R e p e a t i n g b y I t e r a t i o n | D O T I M E S

    ( d o t i m e s ( < c o u n t p a r a m e t e r > < u p p e r - b o u n d f o r m > < r e s u l t f o r m > )

    < b o d y > )

    W h e n D O T I M E S i s e n t e r e d , t h e i s e v a l u a t e d ,

    p r o d u c i n g a n u m b e r o f n . T h e i s t h e n a s s i g n e d

    f r o m 0 t o n - 1 , o n e a f t e r a n o t h e r . F o r e a c h v a l u e , t h e b o d y i s e x e c u t e d

    o n c e .

    O n e x i t , t h e ' s b i n d i n g i s e l i m i n a t e d a n d t h e i s e v a l u a t e d a s t h e r e t u r n v a l u e o f D O T I M E S .

    * ( s e t f r e s u l t 1 )

    1

    * ( d o t i m e s ( c o u n t 5 r e s u l t )

    ( s e t f r e s u l t ( * ( + 1 c o u n t ) r e s u l t ) ) )

    1 2 0

    *

    1 0 . 2 R e p e a t i n g b y I t e r a t i o n | D O L I S T

    ( d o l i s t ( < e l e m e n t p a r a m e t e r > < l i s t f o r m > < r e s u l t f o r m > )

    < b o d y > )

    W h e n D O L I S T i s e n t e r e d , t h e i s e v a l u a t e d , p r o d u c i n g

    a l i s t o f e l e m e n t s . T h e e l e m e n t s i n t h e l i s t a r e t h e n a s s i g n e d , o n e

    a f t e r a n o t h e r , t o t h e e l e m e n t p a r a m e t e r . F o r e a c h v a l u e , t h e b o d y i s

    e x e c u t e d o n c e .

    O n e x i t , t h e e l e m e n t p a r a m e t e r ' s b i n d i n g i s e l i m i n a t e d a n d t h e i s e v a l u a t e d a s t h e r e t u r n v a l u e o f D O L I S T .

    F o r e x a m p l e ,

    * ( L E T ( ( f o o ' ( a b ( c d ) ) ) ( b a r ' ( ) ) )

    ( D O L I S T ( e l e f o o b a r )

    ( S E T F b a r ( C O N S e l e b a r ) ) ) )

    ( ( C D ) B A )

    *

    2 8

  • 7/29/2019 Lisp Tutorial Notes

    30/35

    W h e n e v e r a ( R E T U R N ) i s e n c o u n t e r e d i n D O T I M E S o r D O L I S T ,

    c o m p u t a t i o n w i l l b e t e r m i n a t e d i m m e d i a t e d l y . T h e i s e v a l u -

    a t e d a s t h e r e t u r n v a l u e o f t h e t e r m i n a t e d D O T I M E S a n d D O L I S T f o r m .

    1 0 . 3 R e p e a t i n g b y I t e r a t i o n | D O

    D O e x p r e s s i o n s h a v e t h e f o l l o w i n g p a r t s :

    1 . A l i s t o f p a r a m e t e r s p e c i c a t i o n s , e a c h o f w h i c h c r e a t e s , s e t s , a n d

    r e s e t s o n e o f t h e D O f o r m ' s p a r a m e t e r s :

    ( < p a r a m e t e r > < i n i t i a l v a l u e > < r e s e t f o r m > )

    2 . A t e s t a n d r e t u r n c l a u s e t h a t d e t e r m i n e s w h e n t o s t o p t h e i t e r a t i o n

    a n d s p e c i e s t h e D O f o r m ' s v a l u e o n c e s t o p p e d :

    ( < t r i g g e r > < s i d e e f f e c t f o r m s , i f a n y > < v a l u e f o r m > )

    3 . A b o d y t h a t c o n s i s t s o f D O ' s s u b f o r m s , w h i c h a r e e v a l u a t e d o v e r a n d

    o v e r u n t i l t h e D O i s s t o p p e d :

    < b o d y f o r m >

    T h e s y n t a x o f D O :

    ( D O ( ( < p a r a m e t e r 1 > < i n i t i a l v a l u e 1 > < u p d a t e f o r m 1 > )

    ( < p a r a m e t e r 2 > < i n i t i a l v a l u e 2 > < u p d a t e f o r m 2 > )

    ( < p a r a m e t e r n > < i n i t i a l v a l u e n > < u p d a t e f o r m n > ) )

    ( < t e s t f o r m > < r e s u l t f o r m > )

    < b o d y f o r m > )

    F o r e x a m p l e ,

    * ( D O ( ( L ' ( T H I S I S A L I S T ) ( R E S T L ) )

    ( R E S U L T N I L ) )

    ( ( N U L L L ) R E S U L T )

    ( S E T F R E S U L T ( C O N S ( F I R S T L ) R E S U L T ) ) )

    ( L I S T A I S T H I S )

    * ( d e f u n d o - e x p ( m n )

    ( d o ( ( r e s u l t 1 )

    ( e x p o n e n t n ( - e x p o n e n t 1 ) ) )

    ( ( z e r o p e x p o n e n t ) r e s u l t )

    ( s e t f r e s u l t ( * m r e s u l t ) ) ) )

    2 9

  • 7/29/2019 Lisp Tutorial Notes

    31/35

    O n e n t e r i n g t h e D O , t h e l i s t o f p a r a m e t e r s a r e a l l b o u n d t o i t s c o r r e -

    s p o n d i n g v a l u e ( a g a i n , a v i r t u a l f e n c e e x i s t s t o i s o l a t e t h e s e p a r a m e t e r s

    f r o m t h e v a r i a b l e s o u t s i d e D O ) .

    T h e p a r a m e t e r s p e c i c a t i o n s c a n i n c l u d e u p d a t e f o r m s . T h e p a r a m e -

    t e r s a r e u p d a t e d a c c o r d i n g l y i n e a c h p a s s .

    T h e 2 n d p a r t o f D O i s t h e t e r m i n a t i o n t e s t a n d t h e r e s u l t f o r m . T h e

    t e s t i s a t t e m p t e d b e f o r e e a c h p a s s , i n c l u d i n g t h e 1 s t o n e . T h e i s e v a l u a t e d a s t h e r e t u r n v a l u e o f D O o n l y w h e n t h e t e s t

    s u c c e e d s .

    T h e r e m a y b e z e r o o r m o r e a f t e r t h e

    T h e y a r e a l l e v a l u a t e d w h e n t h e t e s t s u c c e e d s . H o w e v e r , o n l y t h e l a s t

    o n e g i v e s t h e r e t u r n v a l u e o f t h e D O . I f t h e r e i s n o n e , t h e r e t u r n v a l u e

    i s N I L .

    W h e n e v e r ( R E T U R N ) i s e n c o u n t e r e d , D O i s t e r m i n a t e d

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

    t e r m i n a t e d D O .

    A l l i n i t i a l i z a t i o n s a n d u p d a t e s a r e d o n e i n p a r a l l e l , i . e . a l l i n i t i a l f o r m s

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

    a s s i g n m e n t s .

    F o r e x a m p l e ,

    * ( d e f u n d o - e x p ( m n )

    ( d o ( ( r e s u l t m ( * m r e s u l t ) )

    ( e x p o n e n t n ( - e x p o n e n t 1 ) )

    ( c o u n t e r ( - e x p o n e n t 1 ) ( - e x p o n e n t 1 ) ) )

    ( ( z e r o p c o u n t e r ) r e s u l t ) ) )

    E r r o r s o c c u r s b e c a u s e E X P O N E N T i s n o t b o u n d t o a n y v a l u e y e t w h e n i t

    i s u s e d t o e v a l u a t e t h e i n i t i a l f o r m o f C O U N T E R .

    D O * l i k e L E T * b i n d s v a l u e s s e q u e n t i a l l y .

    1 0 . 4 R e p e a t i n g b y I t e r a t i o n | L O O P

    ( l o o p < b o d y > )

    T h e b o d y i s e v a l u a t e d o v e r a n d o v e r u n t i l a ( R E T U R N ) i s

    e n c o u n t e r e d . A g a i n t h e i s e v a l u a t e d a s t h e r e t u r n v a l u e o f

    t h e t e r m i n a t e d L O O P .

    3 0

  • 7/29/2019 Lisp Tutorial Notes

    32/35

    1 1 M i s c e l l a n e o u s P r i m i t i v e s

    1 1 . 1 T r a n s f o r m a t i o n P r i m i t i v e | M A P C A R

    ( M A P C A R # ' < p r o c e d u r e n a m e > < l i s t o f t h i n g s t o w o r k o n > )

    M A P C A R t a k e s t w o a r g u m e n t s : a p r o c e d u r e n a m e a n d a l i s t o f t h i n g s t o

    w o r k o n . T h e r e s u l t i s t h e l i s t o f v a l u e s y o u w o u l d h a v e i f y o u w o r k e d o n

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

    F o r e x a m p l e ,

    * ( M A P C A R # ' F I R S T ' ( ( A B C ) ( X Y Z ) ) )

    ( A X )

    F I R S T ' s r e s u l t , w o r k i n g o n t h e r s t e l e m e n t , ( A B C ) , i s A .

    F I R S T ' s r e s u l t , w o r k i n g o n t h e s e c o n d e l e m e n t , ( X Y Z ) , i s X .

    A l l t h e r e s u l t s o f F I R S T , m a d e i n t o a l i s t , i s ( A X ) .

    I f t h e t r a n s f o r m a t i o n p r o c e d u r e r e q u i r e s m o r e t h a n 1 p a r a m e t e r , t h e r e m u s t

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

    F o r e x a m p l e ,

    * ( M A P C A R # ' = ' ( 1 2 3 ) ' ( 3 2 1 ) )

    ( N I L T N I L )

    I n o t h e r w o r d s , t h e t r a n s f o r m a t i o n p r o c e d u r e i s a p p l i e d t o t h e F I R S T e l e -

    m e n t o f e a c h l i s t , t h e n t h e S E C O N D e l e m e n t o f e a c h l i s t , a n d s o o n u n t i l

    n o m o r e e l e m e n t s r e m a i n i n o n e o f t h e l i s t s .

    * ( M A P C A R # ' l i s t ' ( a b c ) ' ( 1 2 ) ' ( x y z ) )

    ( ( A 1 X ) ( B 2 Y ) )

    1 1 . 2 F i l t e r i n g P r i m i t i v e | R E M O V E - I F , R E M O V E - I F - N O T

    ( r e m o v e - i f # ' < f i l t e r i n g p r o c e d u r e n a m e >

    < l i s t o f e l e m e n t s t o b e f i l t e r e d > )

    ( r e m o v e - i f - n o t # ' < f i l e t e r i n g p r o c e d u r e n a m e >

    < l i s t o f e l e m e n t s t o b e f i l t e r e d > )

    R E M O V E - I F e l i m i n a t e s a l l e l e m e n t s t h a t s a t i s f y t h e l t e r i n g p r e d i -

    c a t e .

    R E M O V E - I F - N O T e l i m i n a t e s a l l e l e m e n t s t h a t d o n o t s a t i s f y t h e l -

    t e r i n g p r e d i c a t e .

    F o r e x a m p l e ,

    * ( R E M O V E - I F # ' e v e n p ' ( 1 2 3 4 5 ) )

    ( 1 3 5 )

    * ( R E M O V E - I F - N O T # ' e v e n p ' ( 1 2 3 4 5 ) )

    ( 2 4 )

    3 1

  • 7/29/2019 Lisp Tutorial Notes

    33/35

    1 1 . 3 C o u n t i n g P r m i t i v e - C O U N T - I F

    ( c o u n t - i f # ' < f i l t e r i n g p r o c e d u r e >

    < l i s t o f e l e m e n t s t o b e c o u n t e d > )

    C O U N T - I F p r o v i d e s a w a y t o c o u n t t h e n u m b e r o f e l e m e n t s i n a l i s t

    w h i c h s a t i s f y a g i v e n c o n d i t i o n .

    F o r e x a m p l e ,

    * ( c o u n t - i f # ' e v e n p ' ( 1 2 3 4 5 ) )

    2

    1 1 . 4 F i n d i n g P r i m i t i v e | F I N D - I F

    ( f i n d - i f # ' < t e s t p r o c e d u r e >

    < l i s t o f e l e m e n t s t o b e t e s t e d > )

    F I N D - I F n d s t h e r s t e l e m e n t i n t h e l i s t w h i c h s a t i s f y t h e t e s t i n g

    p r e d i c a t e .

    F o r e x a m p l e ,

    * ( f i n d - i f # ' e v e n p ' ( 1 2 3 4 5 6 ) )

    2

    3 2

  • 7/29/2019 Lisp Tutorial Notes

    34/35

    1 2 A s s o c i a t i o n L i s t

    A n a s s o c i a t i o n l i s t i s a l i s t o f l i s t s . T h e r s t e l e m e n t o f e a c h s u b l i s t i s c a l l e d

    a k e y .

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

    P A T R I C K a n d K A R E N :

    F i r s t e n t r y S e c o n d e n t r y

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    ( ( P A T R I C K ( R O B E R T D O R O T H Y ) ) ( K A R E N ( J I M E V E ) ) )

    | |

    | |

    K e y 1 K e y 2

    1 2 . 1 A S S O C

    ( A S S O C < k e y > < a s s o c i a t i o n l i s t > )

    F o r e x a m p l e ,

    A s s o c a t i o n L i s t :

    P a r e n t s = = > ( ( P A T R I C K ( R O B E R T D O R O T H Y ) ) ( K A R E N ( J I M E V E ) ) )

    * ( A S S O C ' P A T R I C K P A R E N T S )

    ( P A T R I C K ( R O B E R T D O R O T H Y ) )

    * ( A S S O C ' K A R E N P A R E N T S )

    ( K A R E N ( J I M E V E ) )

    1 2 . 2 E x e r c i s e :

    P A R E N T :

    ( ( P A T R I C K ( R O B E R T D O R O T H Y ) ) ( K A R E N ( J I M E V E ) )

    ( P A T R I C K ( J O H N S A R A H ) ) ( S A R A H ( I S A A C M A R Y ) ) )

    H o w t o r e t r i e v e t h e s e c o n d i n s t a n c e o f P A T R I C K i n t h e a s s o c i a t i o n l i s t

    P A R E N T ?

    3 3

  • 7/29/2019 Lisp Tutorial Notes

    35/35

    1 3 P r o p e r t y L i s t

    A s y m b o l m a y h a v e p r o p e r t y v a l u e s :

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

    = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

    P A T R I C K ( R O B E R T D O R O T H Y ) ( S A R A H ) ( C A N D Y )

    1 3 . 1 R e t r i e v i n g a p r o p e r t y v a l u e

    ( G E T < s y m b o l > < p r o p e r t y n a m e > )

    F o r e x a m p l e ,

    * ( g e t ' p a t r i c k ' p a r e n t )

    ( R O B E R T D O R O T H Y )

    * ( g e t ' p a t r i c k ' g r a n d p a r e n t )

    N I L b e c a u s e n o s u c h p r o p e r t y e x i s t s

    1 3 . 2 S t o r i n g a p r o p e r t y v a l u e

    ( S E T F ( G E T < s y m b o l > < p r o p e r t y n a m e > ) < p r o p e r t y v a l u e > )

    F o r e x a m p l e ,

    * ( s e t f ( g e t ' p a t r i c k ' p a r e n t ) ' ( a l b e r t d o r a ) )

    ( A L B E R T D O R A )

    * ( g e t ' p a t r i c k ' p a r e n t )

    ( A L B E R T D O R A )

    1 3 . 3 R e m o v i n g a p r o p e r t y v a l u e

    ( R E M P R O P < s y m b o l > < p r o p e r t y n a m e > )

    F o r e x a m p l e ,

    * ( r e m p r o p ' p a t r i c k ' s p o u s e )

    T

    * ( g e t ' p a t r i c k ' s p o u s e )

    N I L

    N . B . I f a s y m b o l i s a p r o p e r t y l i s t , o n l y i t s p r o p e r t i e s h a v e v a l u e s . T h e

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

    * p a t r i c k

    E R R O R u n b o u n d v a r i a b l e

    * ( s e t f a l b e r t ' p a t r i c k )

    P A T R I C K

    * ( s e t f a l b e r t p a t r i c k )

    E R R O R

    2 E N D :