Lisp Tutorial Notes
-
Upload
mayra-lozano -
Category
Documents
-
view
236 -
download
0
Transcript of Lisp Tutorial Notes
-
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 :