Upload
luisa-grigorescu
View
225
Download
0
Embed Size (px)
Citation preview
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
1/20
R e s e a r c h R e p o r t A I - 1 9 8 9 - 0 8
E c i e n t P r o l o g : A P r a c t i c a l G u i d e
M i c h a e l A . C o v i n g t o n
A r t i c i a l I n t e l l i g e n c e P r o g r a m s
T h e U n i v e r s i t y o f G e o r g i a
A t h e n s , G e o r g i a 3 0 6 0 2
A u g u s t 1 6 , 1 9 8 9
A b s t r a c t
A b s t r a c t : P r o p e r l y u s e d , P r o l o g i s a s f a s t a s a n y l a n g u a g e w i t h c o m -
p a r a b l e p o w e r . T h i s p a p e r p r e s e n t s g u i d e l i n e s f o r u s i n g P r o l o g e -
c i e n t l y . S o m e o f t h e s e g u i d e l i n e s r e l y o n i m p l e m e n t a t i o n - d e p e n d e n t
f e a t u r e s s u c h a s i n d e x i n g a n d t a i l r e c u r s i o n o p t i m i z a t i o n ; o t h e r s a r e
m a t t e r s o f p u r e a l g o r i t h m i c c o m p l e x i t y .
M a n y p e o p l e t h i n k P r o l o g i s i n e c i e n t . T h i s i s p a r t l y b e c a u s e o f t h e p o o r
p e r f o r m a n c e o f e a r l y e x p e r i m e n t a l i m p l e m e n t a t i o n s , b u t a n o t h e r p r o b l e m i s
t h a t s o m e p r o g r a m m e r s u s e P r o l o g i n e c i e n t l y .
P r o p e r l y u s e d , P r o l o g p e r f o r m s a u t o m a t e d r e a s o n i n g a s f a s t a s a n y o t h e r
l a n g u a g e w i t h c o m p a r a b l e p o w e r . I t i s c e r t a i n l y a s f a s t a s L i s p , i f n o t f a s t e r .
T h e r e a r e s t i l l t h o s e w h o r e w r i t e P r o l o g p r o g r a m s i n C \ f o r s p e e d , " b u t t h i s
i s t a n t a m o u n t t o b o a s t i n g , \ I c a n i m p l e m e n t t h e c o r e o f P r o l o g b e t t e r t h a n
a p r o f e s s i o n a l P r o l o g i m p l e m e n t o r . "
1
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
2/20
T h i s p a p e r w i l l p r e s e n t s o m e p r a c t i c a l g u i d e l i n e s f o r u s i n g P r o l o g e c i e n t l y .
T h e p o i n t s m a d e h e r e a r e g e n e r a l a n d g o w e l l b e y o n d t h e i m p l e m e n t a t i o n -
s p e c i c a d v i c e n o r m a l l y g i v e n i n m a n u a l s .
1 T h i n k p r o c e d u r a l l y a s w e l l a s d e c l a r a -
t i v e l y .
P r o l o g i s u s u a l l y d e s c r i b e d a s a d e c l a r a t i v e o r n o n - p r o c e d u r a l l a n g u a g e . T h i s
i s a h a l f - t r u t h . I t w o u l d b e b e t t e r t o s a y t h a t m o s t P r o l o g c l a u s e s c a n b e
r e a d t w o w a y s : a s d e c l a r a t i v e s t a t e m e n t s o f i n f o r m a t i o n a n d a s p r o c e d u r e s
f o r u s i n g t h a t i n f o r m a t i o n . F o r i n s t a n c e ,
i n ( X , u s a ) : - i n ( X , g e o r g i a ) .
m e a n s b o t h \ X i s i n t h e U . S . A . i f X i s i n G e o r g i a " a n d \ T o p r o v e t h a t X i s
i n t h e U . S . A . , p r o v e t h a t X i s i n G e o r g i a . "
P r o l o g i s n o t a l o n e i n t h i s r e g a r d . T h e F o r t r a n s t a t e m e n t
X = Y + Z
c a n b e r e a d b o t h d e c l a r a t i v e l y a s t h e e q u a t i o n x = y + z a n d p r o c e d u r a l l y a s
t h e i n s t r u c t i o n s L O A D Y , A D D Z , S T O R E X . O f c o u r s e d e c l a r a t i v e r e a d i n g s
p e r v a d e P r o l o g t o a f a r g r e a t e r e x t e n t t h a n F o r t r a n .
S o m e t i m e s t h e d e c l a r a t i v e a n d p r o c e d u r a l r e a d i n g s c o n i c t . F o r e x a m p l e ,
F o r t r a n l e t s y o u u t t e r t h e m a t h e m a t i c a l a b s u r d i t y X = X + 1 . M o r e s u b t l y ,
t h e F o r t r a n s t a t e m e n t s
A = ( B + C ) + D
A = B + ( C + D )
2
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
3/20
l o o k m a t h e m a t i c a l l y e q u i v a l e n t , b u t t h e y g i v e p r o f o u n d l y d i e r e n t r e s u l t s
w h e n B = 1 0 0 0 0 0 0 0 , C = - 1 0 0 0 0 0 0 0 , a n d D = 0 . 0 0 0 0 0 1 2 3 4 5 .
A n a l o g o u s t h i n g s h a p p e n i n P r o l o g . T o t a k e a f a m i l i a r e x a m p l e , t h e c l a u s e
a n c e s t o r ( A , C ) : -
a n c e s t o r ( A , B ) , a n c e s t o r ( B , C ) .
i s p a r t o f a l o g i c a l l y c o r r e c t d e n i t i o n o f \ a n c e s t o r , " b u t i t c a n c a u s e a n
e n d l e s s l o o p w h e n P r o l o g i n t e r p r e t s i t p r o c e d u r a l l y .
T h e l o o p a r i s e s b e c a u s e , w h e n B a n d C a r e b o t h u n k n o w n , t h e g o a l a n c e s t o r ( A , B )
o n t h e r i g h t i s n o d i e r e n t f r o m a n c e s t o r ( A , C ) o n t h e l e f t . T h e c l a u s e s i m p l y
c a l l s i t s e l f w i t h e s s e n t i a l l y t h e s a m e a r g u m e n t s , m a k i n g n o p r o g r e s s t o w a r d
a p r o o f . B u t i f t h e c l a u s e i s r e w r i t t e n a s
a n c e s t o r ( A , C ) : -
p a r e n t ( A , B ) , a n c e s t o r ( B , C ) .
t h e r e i s n o l o o p b e c a u s e a n c e s t o r c a n n o t c a l l i t s e l f w i t h t h e s a m e a r g u m e n t s .
T h e m o r a l i s t h a t t o u s e P r o l o g e e c t i v e l y , o n e m u s t u n d e r s t a n d n o t o n l y t h e
d e c l a r a t i v e r e a d i n g o f t h e p r o g r a m b u t a l s o t h e p r o c e d u r e s t h a t t h e c o m p u t e r
w i l l f o l l o w w h e n e x e c u t i n g i t . T h e l i m i t a t i o n s o f P r o l o g ' s b u i l t - i n p r o o f p r o -
c e d u r e s a r e n o t a w s i n t h e i m p l e m e n t a t i o n ; t h e y a r e d e l i b e r a t e c o m p r o m i s e s
b e t w e e n l o g i c a l t h o r o u g h n e s s a n d e c i e n t s e a r c h .
2 N a r r o w t h e s e a r c h .
S e a r c h i n g t a k e s t i m e , a n d a n e c i e n t p r o g r a m m u s t s e a r c h e c i e n t l y . I n a
k n o w l e d g e b a s e t h a t l i s t s 1 0 0 0 g r a y o b j e c t s b u t o n l y 1 0 h o r s e s , t h e q u e r y
? - h o r s e ( X ) , g r a y ( X ) .
3
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
4/20
c a n b e 1 0 0 t i m e s a s f a s t a s t h e a l t e r n a t i v e
? - g r a y ( X ) , h o r s e ( X ) .
b e c a u s e i t n a r r o w s t h e r a n g e o f p o s s i b i l i t i e s e a r l i e r .
M a n y o p p o r t u n i t i e s t o n a r r o w t h e s e a r c h s p a c e a r e m u c h m o r e s u b t l e . C o n -
s i d e r t h e p r o b l e m o f d e t e r m i n i n g w h e t h e r t w o l i s t s a r e s e t - e q u i v a l e n t | t h a t
i s , w h e t h e r t h e y h a v e e x a c t l y t h e s a m e e l e m e n t s , t h o u g h n o t n e c e s s a r i l y i n
t h e s a m e o r d e r .
T w o l i s t s a r e s e t - e q u i v a l e n t i f a n d o n l y i f o n e o f t h e m i s a p e r m u t a t i o n o f t h e
o t h e r . O n e s t r a t e g y , t h e n , i s t o g e n e r a t e a l l t h e p e r m u t a t i o n s o f t h e r s t l i s t
a n d c o m p a r e t h e m t o t h e s e c o n d l i s t :
s e t _ e q u i v a l e n t ( L 1 , L 2 ) : -
p e r m u t e ( L 1 , L 2 ) .
T h e t r o u b l e i s t h a t a n N - e l e m e n t l i s t h a s N ! p e r m u t a t i o n s ; t e s t i n g t h e s e t -
e q u i v a l e n c e o f t w o 2 0 - e l e m e n t l i s t s c a n r e q u i r e 2 . 4 1 0
1 8
c o m p a r i s o n s . I
h a v e a c t u a l l y s e e n s o m e o n e a t t e m p t t h i s i n a P r o l o g p r o g r a m .
I t i s m u c h f a s t e r t o s o r t b o t h l i s t s a n d c o m p a r e t h e r e s u l t s :
s e t _ e q u i v a l e n t ( L 1 , L 2 ) : -
s o r t ( L 1 , L 3 ) , s o r t ( L 2 , L 3 ) .
A n N - e l e m e n t l i s t c a n b e s o r t e d i n a b o u t N l o g
2
N s t e p s | i . e . , a b o u t 8 6
s t e p s p e r 2 0 - e l e m e n t l i s t | a n d e a c h \ s t e p " i n v o l v e s c o n s i d e r a b l y l e s s w o r k
t h a n g e n e r a t i n g a n e w p e r m u t a t i o n . S o t h i s t e c h n i q u e i s f a s t e r t h a n t h e r s t
o n e b y a f a c t o r o f m o r e t h a n 1 0
1 6
4
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
5/20
3 L e t u n i c a t i o n d o t h e w o r k .
A s a c l a s s r o o m e x e r c i s e I a s k m y s t u d e n t s t o w r i t e a p r e d i c a t e t h a t a c c e p t s a
l i s t a n d s u c c e e d s i f t h a t l i s t h a s e x a c t l y t h r e e e l e m e n t s . S o m e o f t h e w e a k e r
a n s w e r s t h a t I g e t l o o k l i k e t h i s :
h a s _ t h r e e _ e l e m e n t s ( X ) : -
l e n g t h ( X , N ) ,
N = 3 .
S l i g h t l y b e t t e r a r e t h o s e t h a t s a y
h a s _ t h r e e _ e l e m e n t s ( X ) : -
l e n g t h ( X , 3 ) .
t h e r e b y l e t t i n g t h e b u i l t - i n p a t t e r n - m a t c h e r t e s t w h e t h e r l e n g t h r e t u r n s 3 .
B u t t h e b e s t s t u d e n t s c u t t h e G o r d i a n k n o t b y w r i t i n g :
h a s _ t h r e e _ e l e m e n t s ( _ , _ , _ ] ) .
T h e p o i n t i s t h a t _ , _ , _ ] m a t c h e s a n y t h r e e - e l e m e n t l i s t a n d n o t h i n g e l s e .
U n i c a t i o n d o e s a l l t h e w o r k .
U n i c a t i o n c a n e v e n r e a r r a n g e t h e e l e m e n t s o f a d a t a s t r u c t u r e . H e r e i s a
p r e d i c a t e t h a t a c c e p t s a l i s t a n d g e n e r a t e s , f r o m i t , a s i m i l a r l i s t w i t h t h e
r s t t w o e l e m e n t s s w a p p e d :
s w a p _ f i r s t _ t w o ( A , B | R e s t ] , B , A | R e s t ] ) .
A g a i n , u n i c a t i o n d o e s a l l t h e w o r k . M o r e p r e c i s e l y , t h e d a t a s t r u c t u r e s
A , B | R e s t ] a n d B , A | R e s t ] , o r t e m p l a t e s f o r t h e m , a r e c r e a t e d w h e n t h e
p r o g r a m i s c o m p i l e d , a n d u n i c a t i o n g i v e s v a l u e s t o t h e v a r i a b l e s a t r u n t i m e .
5
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
6/20
4 A v o i d a s s e r t a n d r e t r a c t .
B e g i n n e r s t e n d t o o v e r u s e t h e a s s e r t a n d r e t r a c t p r e d i c a t e s t o m o d i f y
t h e k n o w l e d g e b a s e . T h e r e a r e t w o g o o d r e a s o n s n o t t o d o s o : a s s e r t a n d
r e t r a c t a r e r e l a t i v e l y s l o w , a n d , p e r h a p s m o r e i m p o r t a n t l y , t h e y l e a d t o
m e s s y l o g i c .
E v e n t h e s l o w n e s s i s t w o f o l d . I t t a k e s a p p r e c i a b l e t i m e t o p e r f o r m a n a s s e r t
o r r e t r a c t . F u r t h e r , i n m o s t i m p l e m e n t a t i o n s , a p r e d i c a t e t h a t h a s b e e n ( o r
c a n b e ) m o d i e d b y a s s e r t o r r e t r a c t c a n n o t r u n a t f u l l c o m p i l e d s p e e d . ,
( A L S P r o l o g i s a s t r i k i n g e x c e p t i o n . )
M o r e i m p o r t a n t l y , t h e h a p h a z a r d u s e o f a s s e r t a n d r e t r a c t c o n f u s e s t h e
p r o g r a m l o g i c . T h e e e c t s o f a s s e r t a n d r e t r a c t a r e n o t u n d o n e b y b a c k -
t r a c k i n g . B y c o n t r a s t , m o s t p r e d i c a t e s r e t u r n t h e i r r e s u l t s b y i n s t a n t i a t i n g
v a r i a b l e s ; t h e s e i n s t a n t i a t i o n s a r e d i s c a r d e d i f t h e o v e r a l l g o a l f a i l s , a n d y o u
g e t o n l y t h e r e s u l t s o f c o m p u t a t i o n s t h a t h a v e s u c c e e d e d . I f y o u u s e a s s e r t
a s a g e n e r a l w a y t o s t o r e t e m p o r a r y d a t a , y o u w i l l e n d u p u n a b l e t o t e l l
w h e t h e r t h e d a t a c a m e f r o m s u c c e s s f u l c o m p u t a t i o n s . T h i s c a n m a k e p r o -
g r a m s v e r y h a r d t o d e b u g .
T h e n o r m a l w a y t o s t o r e t e m p o r a r y i n f o r m a t i o n i s t o p a s s i t a l o n g f r o m
o n e s t e p t o t h e n e x t a s a r g u m e n t s t o p r o c e d u r e s . T h e l e g i t i m a t e u s e s o f
a s s e r t a n d r e t r a c t a r e t o r e c o r d n e w k n o w l e d g e i n t h e k n o w l e d g e b a s e
( i n a p r o g r a m t h a t \ l e a r n s " ) a n d , l e s s c o m m o n l y , t o s t o r e t h e i n t e r m e d i a t e
r e s u l t s o f a c o m p u t a t i o n t h a t m u s t b a c k t r a c k p a s t t h e p o i n t a t w h i c h i t
g e t s i t s r e s u l t . E v e n i n t h e l a t t e r c a s e , t h e b u i l t - i n p r e d i c a t e s b a g o f a n d
s e t o f o f t e n p r o v i d e a b e t t e r w a y t o c o l l e c t a l t e r n a t i v e s o l u t i o n s i n t o a s i n g l e
s t r u c t u r e . T h e y a r e i m p l e m e n t e d i n h a n d - o p t i m i z e d m a c h i n e c o d e a n d a r e
f a s t e r t h a n a n y t h i n g y o u c o u l d c o n s t r u c t i n P r o l o g .
6
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
7/20
5 U n d e r s t a n d t o k e n i z a t i o n .
T h e i n t e r n a l m e m o r y r e p r e s e n t a t i o n o f d a t a i n P r o l o g c a n b e q u i t e d i e r e n t
f r o m t h e p r i n t e d r e p r e s e n t a t i o n . T h e f u n d a m e n t a l u n i t i s t h e t e r m , o f w h i c h
t h e r e a r e t h r e e t y p e s : n u m b e r s , a t o m s , a n d s t r u c t u r e s . N u m b e r s a r e s t o r e d i n
x e d - p o i n t o r o a t i n g - p o i n t b i n a r y , t h e s a m e a s i n m o s t o t h e r p r o g r a m m i n g
l a n g u a g e s . A t o m s a n d s t r u c t u r e s h a v e r e p r e s e n t a t i o n s s p e c i c t o P r o l o g .
A t o m s a r e s t o r e d i n a s y m b o l t a b l e i n w h i c h e a c h a t o m o c c u r s o n l y o n c e ;
a t o m s i n t h e p r o g r a m a r e r e p l a c e d b y t h e i r a d d r e s s e s i n t h e s y m b o l t a b l e .
T h i s i s c a l l e d i n t e r n i n g o r t o k e n i z a t i o n o f t h e a t o m s , a n d i t i s p e r f o r m e d
w h e n e v e r P r o l o g r e a d s a t o m s a n d r e c o g n i z e s t h e m a s s u c h | w h e n l o a d i n g
t h e p r o g r a m , a c c e p t i n g q u e r i e s f r o m t h e k e y b o a r d , o r e v e n a c c e p t i n g i n p u t
a t r u n t i m e w i t h t h e r e a d p r e d i c a t e . W h e n e v e r a n a t o m e x i s t s , i t i s i n t h e
s y m b o l t a b l e .
B e c a u s e o f t o k e n i z a t i o n , a P r o l o g d a t a s t r u c t u r e c a n b e m u c h s h o r t e r t h a n i t
l o o k s : r e p e a t e d o c c u r r e n c e s o f t h e s a m e a t o m t a k e u p l i t t l e a d d i t i o n a l s p a c e .
D e s p i t e i t s a p p e a r a n c e , t h e s t r u c t u r e
f ( ` W h a t a l o n g a t o m t h i s s e e m s t o b e ' ,
` W h a t a l o n g a t o m t h i s s e e m s t o b e ' ,
` W h a t a l o n g a t o m t h i s s e e m s t o b e ' )
i s v e r y c o m p a c t | p o s s i b l y s m a l l e r t h a n g ( a a a a a , b b b b b , c c c c c ) . T h e m e m -
o r y r e p r e s e n t a t i o n s o f t h e s e t w o s t r u c t u r e s a r e s h o w n i n F i g u r e 1 .
F u r t h e r , a t o m s c a n b e c o m p a r e d m o r e q u i c k l y t h a n a n y t h i n g e l s e e x c e p t
n u m b e r s . T o c o m p a r e t w o a t o m s , e v e n l o n g o n e s , t h e c o m p u t e r n e e d o n l y
c o m p a r e t h e i r a d d r e s s e s . B y c o n t r a s t , c o m p a r i n g l i s t s o r s t r u c t u r e s r e q u i r e s
e v e r y e l e m e n t t o b e e x a m i n e d i n d i v i d u a l l y .
C o n s i d e r f o r e x a m p l e t h e f o l l o w i n g t w o t e s t s :
a \ = b
7
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
8/20
a a a a a a a a \ = a a a a a a a b
W i t h o u t t o k e n i z a t i o n , t h e s e c o n d t e s t w o u l d t a k e l o n g e r b e c a u s e i t w o u l d b e
n e c e s s a r y t o c o m p a r e e i g h t c o r r e s p o n d i n g c h a r a c t e r s i n s t e a d o f j u s t o n e . I n
P r o l o g , h o w e v e r , t h e s e c o n d t e s t i s j u s t a s f a s t a s t h e r s t , b e c a u s e a l l t h a t
i t d o e s i s v e r i f y t h a t t w o a d d r e s s e s i n t h e s y m b o l t a b l e a r e d i e r e n t . T h e
s t r i n g s a a a a a a a a a n d a a a a a a a b w e r e a s s i g n e d t o d i s t i n c t a d d r e s s e s o n c e a n d
f o r a l l w h e n t h e y w e r e r s t t o k e n i z e d .
6 A v o i d s t r i n g p r o c e s s i n g .
C h a r a c t e r s t r i n g h a n d l i n g i s r a r e l y n e e d e d i n P r o l o g e x c e p t t o c o n v e r t p r i n t -
a b l e s t r i n g s i n t o m o r e m e a n i n g f u l s t r u c t u r e s . T h e i n p u t t o a n a t u r a l l a n g u a g e
p a r s e r , f o r i n s t a n c e , s h o u l d b e
t h e , d o g , c h a s e d , t h e , c a t ]
r a t h e r t h a n
" t h e d o g c h a s e d t h e c a t "
s o t h a t t h e b e n e t s o f t o k e n i z a t i o n c a n b e o b t a i n e d .
C h a r a c t e r s t r i n g s i n P r o l o g a r e b u l k y . W h e r e a s a b c i s a s i n g l e a t o m , t h e
s t r i n g \ a b c " i s a l i s t o f n u m b e r s r e p r e s e n t i n g A S C I I c o d e s , i . e . , 9 7 , 9 8 , 9 9 ]
R e c a l l t h a t a l i s t , i n t u r n , i s a h e a d a n d a t a i l h e l d t o g e t h e r b y t h e f u n c t o r
` . ' , s o t h a t 9 7 , 9 8 , 9 9 ] i s r e a l l y . ( 9 7 , . ( 9 8 , . ( 9 9 , ] ) ) ) , r e p r e s e n t e d i n t e r n a l l y
a s s h o w n i n F i g . 2 . S t r i n g s a r e d e s i g n e d t o b e e a s i l y t a k e n a p a r t ; t h e i r
o n l y p r o p e r u s e i s i n s i t u a t i o n s w h e r e a c c e s s t o t h e i n d i v i d u a l c h a r a c t e r s i s
e s s e n t i a l .
8
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
9/20
A r i t y / P r o l o g h a s a n a l t e r n a t i v e t y p e o f s t r i n g , w r i t t e n $ a b c $ o r t h e l i k e , t h a t
i s s t o r e d c o m p a c t l y b u t n o t i n t e r n e d i n t h e s y m b o l t a b l e . T h i s i s i m p o r t a n t
b e c a u s e t h e r e i s u s u a l l y a l i m i t o n t h e n u m b e r o f s y m b o l s i n t h e t a b l e ; a
p r o g r a m w i t h l o t s o f t e x t u a l m e s s a g e s c a n a v o i d h i t t i n g t h i s l i m i t b y u s i n g
$ - s t r i n g s i n s t e a d o f l o n g a t o m s .
T h e b u i l t - i n p r e d i c a t e r e a d t o k e n i z e s i t s i n p u t . M a n y i m p l e m e n t a t i o n s p r o -
v i d e p r e d i c a t e s t h a t a r e l i k e r e a d e x c e p t t h a t t h e y a c c e p t i n p u t f r o m a l i s t o f
c h a r a c t e r s . W i t h s u c h a p r e d i c a t e , i t i s e a s y t o p r e p r o c e s s a c h a r a c t e r s t r i n g
t o m a k e i t f o l l o w P r o l o g s y n t a x , t h e n c o n v e r t i t t o a P r o l o g t e r m .
7 R e c o g n i z e t a i l r e c u r s i o n .
B e c a u s e P r o l o g h a s n o l o o p s t r u c t u r e s , t h e o n l y w a y t o e x p r e s s r e p e t i t i o n
i s t h r o u g h r e c u r s i o n . V a r i a b l e s t h a t c h a n g e v a l u e f r o m o n e i t e r a t i o n t o t h e
n e x t m u s t b e p a s s e d a l o n g a s a r g u m e n t s , t h u s :
c o u n t ( N ) : -
w r i t e ( N ) , n l ,
N e w N i s N + 1 ,
c o u n t ( N e w N ) .
R e c u r s i o n c a n b e i n e c i e n t b e c a u s e , i n g e n e r a l , e a c h p r o c e d u r e c a l l r e q u i r e s
i n f o r m a t i o n t o b e s a v e d s o t h a t c o n t r o l c a n r e t u r n t o t h e c a l l i n g p r o c e d u r e .
T h u s , i f a c l a u s e c a l l s i t s e l f 1 0 0 0 t i m e s , t h e r e w i l l b e 1 0 0 0 c o p i e s o f i t s s t a c k
f r a m e i n m e m o r y .
T h e r e i s o n e e x c e p t i o n . T a i l r e c u r s i o n i s t h e s p e c i a l c a s e i n w h i c h c o n t r o l
n e e d n o t r e t u r n t o t h e c a l l i n g p r o c e d u r e b e c a u s e t h e r e i s n o t h i n g m o r e f o r
i t t o d o . I n t h i s c a s e t h e c a l l e d p r o c e d u r e c a n b e e n t e r e d b y a s i m p l e j u m p
w i t h o u t c r e a t i n g a s t a c k f r a m e .
M o s t P r o l o g s r e c o g n i z e t a i l r e c u r s i o n a n d t r a n s f o r m i t i n t o i t e r a t i o n s o t h a t
r e p e a t e d e x e c u t i o n d o e s n o t c o n s u m e m e m o r y . I n P r o l o g , t a i l r e c u r s i o n e x i s t s
w h e n :
9
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
10/20
1 . t h e r e c u r s i v e c a l l i s t h e l a s t s u b g o a l i n t h e c l a u s e ;
2 . t h e r e a r e n o u n t r i e d a l t e r n a t i v e c l a u s e s ;
3 . t h e r e a r e n o u n t r i e d a l t e r n a t i v e s f o r a n y s u b g o a l p r e c e d i n g t h e r e c u r s i v e
c a l l i n t h e s a m e c l a u s e .
F i g u r e 3 s h o w s a t a i l r e c u r s i v e p r e d i c a t e a n d t h r e e p r e d i c a t e s t h a t a r e n o t
t a i l r e c u r s i v e f o r d i e r e n t r e a s o n s .
A t a i l r e c u r s i v e p r e d i c a t e n o r m a l l y c o n t a i n s o n e o r m o r e t e s t s t o s t o p t h e
r e c u r s i o n . T h e s e m u s t n o r m a l l y p r e c e d e t h e r e c u r s i v e c l a u s e , t h u s :
c o u n t _ t o _ 1 0 0 ( X ) : -
X > 1 0 0 .
/ * s u c c e e d a n d d o n o t h i n g * /
c o u n t _ t o _ 1 0 0 ( X ) : -
X = < 1 0 0 ,
w r i t e ( X ) , n l ,
N e w X i s X + 1 ,
c o u n t _ t o _ 1 0 0 ( N e w X ) .
H o w e v e r , t h e r e c u r s i v e c l a u s e c a n b e f o l l o w e d b y o t h e r c l a u s e s i f , a t t h e t i m e
o f t h e c a l l , t h e y w i l l h a v e b e e n r u l e d o u t b y c u t s o r b y i n d e x i n g ( s e e b e l o w ) .
T h e l a c k o f c o n v e n t i o n a l l o o p c o n s t r u c t s i s n o t a a w i n P r o l o g . O n t h e
c o n t r a r y , i t m a k e s i t e a s i e r t o p r o v e t h e o r e m s a b o u t h o w P r o l o g p r o g r a m s
b e h a v e . F o r y e a r s , m a t h e m a t i c i a n s h a v e d e a l t w i t h r e p e t i t i v e p a t t e r n s b y
u s i n g i n d u c t i v e p r o o f s | t h a t i s , b y s u b s t i t u t i n g r e c u r s i o n f o r i t e r a t i o n .
P r o l o g d o e s t h e s a m e t h i n g . A f t e r y e a r s o f u s i n g b o t h P r o l o g a n d P a s c a l
a l m o s t d a i l y , I n d t h e P r o l o g a p p r o a c h t o r e p e t i t i o n l e s s e r r o r - p r o n e .
1 0
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
11/20
8 L e t i n d e x i n g h e l p .
T o n d a c l a u s e t h a t m a t c h e s t h e q u e r y
? - f ( a , b ) .
t h e P r o l o g s y s t e m d o e s n o t l o o k a t a l l t h e c l a u s e s i n t h e k n o w l e d g e b a s e |
o n l y t h e c l a u s e s f o r f . A s s o c i a t e d w i t h t h e f u n c t o r f i s a p o i n t e r o r h a s h -
i n g f u n c t i o n t h a t s e n d s t h e s e a r c h r o u t i n e d i r e c t l y t o t h e r i g h t p l a c e . T h i s
t e c h n i q u e i s k n o w n a s i n d e x i n g
M a n y i m p l e m e n t a t i o n s c a r r y t h i s f u r t h e r b y i n d e x i n g o n n o t o n l y t h e p r e d i -
c a t e , b u t a l s o t h e p r i n c i p a l f u n c t o r o f t h e r s t a r g u m e n t . I n s u c h a n i m p l e -
m e n t a t i o n , t h e s e a r c h c o n s i d e r s o n l y c l a u s e s t h a t m a t c h f ( a , ) a n d n e g l e c t s
c l a u s e s s u c h a s f ( b , c ) .
F i r s t - a r g u m e n t i n d e x i n g i s a t r a d e - o . I t s i n t e n t i s t o s a v e e x e c u t i o n t i m e
a n d , e v e n m o r e i m p o r t a n t l y , t o s a v e m e m o r y b y r e d u c i n g t h e n e e d t o r e c o r d
b a c k t r a c k p o i n t s . B u t t h e i n d e x i n g p r o c e s s i t s e l f c o m p l i c a t e s t h e s e a r c h b y
r e q u i r i n g m o r e a n a l y s i s o f t h e t h i n g b e i n g s e a r c h e d f o r . I n d e x i n g o n t h e
p r i n c i p a l f u n c t o r o f t h e r s t a r g u m e n t r e p r e s e n t s a r e a s o n a b l e c o m p r o m i s e .
I n d e x i n g h a s t w o p r a c t i c a l c o n s e q u e n c e s . F i r s t , a r g u m e n t s s h o u l d b e o r d e r e d
s o t h a t t h e r s t a r g u m e n t i s t h e o n e m o s t l i k e l y t o b e k n o w n a t s e a r c h t i m e ,
a n d p r e f e r a b l y t h e m o s t d i v e r s e . W i t h r s t - a r g u m e n t i n d e x i n g , t h e c l a u s e s
f ( a , x ) .
f ( b , x ) .
f ( c , x ) .
c a n o f t e n b e s e a r c h e d i n o n e s t e p , w h e r e a s t h e c l a u s e s
f ( x , a ) .
f ( x , b ) .
f ( x , c ) .
1 1
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
12/20
a l w a y s r e q u i r e t h r e e s t e p s b e c a u s e i n d e x i n g c a n n o t d i s t i n g u i s h t h e m .
S e c o n d , i n d e x i n g c a n m a k e a p r e d i c a t e t a i l r e c u r s i v e w h e n i t o t h e r w i s e w o u l d
n o t b e . F o r e x a m p l e ,
f ( x ( A , B ) ) : - f ( A ) .
f ( q ) .
i s t a i l r e c u r s i v e e v e n t h o u g h t h e r e c u r s i v e c a l l i s n o t i n t h e l a s t c l a u s e , b e -
c a u s e i n d e x i n g e l i m i n a t e s t h e l a s t c l a u s e f r o m c o n s i d e r a t i o n : a n y a r g u m e n t
t h a t m a t c h e s x ( A , B ) c a n n o t m a t c h q . T h e s a m e i s t r u e o f l i s t p r o c e s s i n g
p r e d i c a t e s o f t h e f o r m
f ( H e a d | T a i l ] , . . . ) : - . . .
f ( ] , . . . ) .
b e c a u s e i n d e x i n g d i s t i n g u i s h e s n o n - e m p t y l i s t s f r o m ]
9 U s e m o d e d e c l a r a t i o n s .
N o r m a l l y , P r o l o g a s s u m e s t h a t e a c h o f t h e a r g u m e n t s t o a p r e d i c a t e m a y b e
i n s t a n t i a t e d o r u n i n s t a n t i a t e d . T h i s r e s u l t s i n c o m p i l e d c o d e t h a t b r a n c h e s
t o s e v e r a l a l t e r n a t i v e v e r s i o n s o f e a c h p r o c e d u r e i n o r d e r t o h a n d l e a l l t h e
c o m b i n a t i o n s .
M o s t c o m p i l e r s p r o v i d e a m o d e s t a t e m e n t t h a t a l l o w s y o u t o r u l e o u t s o m e o f
t h e a l t e r n a t i v e s a n d t h e r e b y s p e e d u p e x e c u t i o n . F o r i n s t a n c e , t h e p r e d i c a t e
c a p i t a l _ o f ( g e o r g i a , a t l a n t a ) .
c a n b e u s e d w i t h e i t h e r a r g u m e n t i n s t a n t i a t e d , o r b o t h , o r n o n e , b u t i f w r i t t e n
a s
1 2
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
13/20
: - m o d e c a p i t a l _ o f ( + , - ) .
c a p i t a l _ o f ( g e o r g i a , a t l a n t a ) .
i t r e q u i r e s t h e r s t a r g u m e n t t o b e i n s t a n t i a t e d a n d t h e s e c o n d t o b e u n i n -
s t a n t i a t e d .
A d d m o d e d e c l a r a t i o n s c a u t i o u s l y a f t e r t h e c o d e h a s b e e n d e b u g g e d . A t l e a s t
o n e m a n u a l w a r n s o m i n o u s l y t h a t i f t h e m o d e d e c l a r a t i o n s a r e v i o l a t e d , \ I n
s o m e c a s e s , t h e p r o g r a m w i l l w o r k . I n o t h e r s , y o u r p r o g r a m w i l l p r o d u c e
e r r o n e o u s r e s u l t s o r n o t w o r k a t a l l . "
T h e i d e a l P r o l o g c o m p i l e r w o u l d p e r f o r m d a t a o w a n a l y s i s a n d g e n e r a t e a t
l e a s t s o m e o f i t s m o d e d e c l a r a t i o n s a u t o m a t i c a l l y .
1 0 W o r k a t t h e b e g i n n i n g o f t h e l i s t .
T h e o n l y d i r e c t l y a c c e s s i b l e e l e m e n t o f a l i s t i s t h e r s t o n e . I t p a y s t o
p e r f o r m a l l m a n i p u l a t i o n s t h e r e a n d a v o i d , a s f a r a s p o s s i b l e , t r a v e r s i n g t h e
w h o l e l e n g t h o f t h e l i s t .
S o m e t i m e s t h i s e n t a i l s b u i l d i n g t h e l i s t b a c k w a r d . A f t e r a l l , t h e r e i s n o t h i n g
s a c r e d a b o u t t h e l e f t - t o - r i g h t o r d e r i n w h i c h l i s t s a r e n o r m a l l y p r i n t e d . F o r
e x a m p l e , a p r o g r a m t h a t s o l v e s a m a z e m i g h t r e c o r d i t s s t e p s b y a d d i n g t h e m
a t t h e b e g i n n i n g o f a l i s t . T h e r e s u l t i s a l i s t g i v i n g t h e p a t h , b a c k w a r d .
W o r k i n g a t t h e b e g i n n i n g o f t h e l i s t c a n r e a l l y p a y o i n e c i e n c y . A c l a s s i c
e x a m p l e i s a w a y o f r e v e r s i n g a l i s t . T h e f a m i l i a r , i n e c i e n t \ n a i v e r e v e r s e "
p r e d i c a t e i s t h e f o l l o w i n g :
r e v e r s e ( ] , ] ) .
r e v e r s e ( H | T ] , R e s u l t ) : -
r e v e r s e ( T , R e v e r s e d T ) ,
a p p e n d ( R e v e r s e d T , H ] , R e s u l t ) .
1 3
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
14/20
B u t r e v e r s i n g a n N - e l e m e n t l i s t t h i s w a y t a k e s t i m e p r o p o r t i o n a l t o N
2
O n e f a c t o r o f N c o m e s f r o m t h e f a c t t h a t r e v e r s e i s c a l l e d o n c e f o r e a c h l i s t
e l e m e n t . T h e o t h e r f a c t o r o f N c o m e s f r o m a p p e n d ( R e v e r s e d T , H ] , R e s u l t )
b e c a u s e a p p e n d h a s t o s t e p t h r o u g h a l l t h e e l e m e n t s o f R e v e r s e d T i n o r d e r
t o g e t t o t h e e n d a n d a t t a c h H ] . T h i s t a k e s t i m e p r o p o r t i o n a l t o t h e l e n g t h
o f R e v e r s e d T , w h i c h i n t u r n i s p r o p o r t i o n a l t o N
A f a s t e r w a y t o r e v e r s e a l i s t i s t o e x t r a c t e l e m e n t s o n e b y o n e f r o m t h e
b e g i n n i n g o f o n e l i s t a n d a d d t h e m a t t h e b e g i n n i n g o f a n o t h e r . T h i s r e q u i r e s
a t h r e e - a r g u m e n t p r o c e d u r e , w h e r e t h e t h i r d a r g u m e n t i s u s e d t o r e t u r n t h e
n a l r e s u l t :
f a s t _ r e v e r s e ( L i s t 1 , L i s t 2 ) : -
f r ( L i s t 1 , ] , L i s t 2 ) .
f r ( H e a d | T a i l ] , S o F a r , R e s u l t ) : -
f r ( T a i l , H e a d | S o F a r ] , R e s u l t ) .
f r ( ] , S o F a r , S o F a r ) .
T h e r s t c l a u s e o f f r t r a n s f e r s t h e r s t e l e m e n t o f H e a d | T a i l ] t o S o F a r ,
t h e n c a l l s i t s e l f t o d o t h e s a m e t h i n g a g a i n . W h e n H e a d | T a i l ] b e c o m e s
e m p t y , t h e s e c o n d c l a u s e o f f r u n i e s S o F a r w i t h R e s u l t . T h e p r o c e s s t a k e s
l i n e a r t i m e .
1 1 A v o i d C O N S i n g .
I n P r o l o g , a s i n L i s p , i t i s m u c h e a s i e r t o e x a m i n e e x i s t i n g s t r u c t u r e s t h a n
t o c r e a t e n e w o n e s . C r e a t i n g n e w s t r u c t u r e s ( k n o w n i n L i s p a s C O N S i n g )
r e q u i r e s d y n a m i c a l l o c a t i o n o f m e m o r y .
I f , t h e r e f o r e , t h e s a m e c o m p u t a t i o n c a n b e d o n e w i t h o r w i t h o u t C O N S i n g ,
t h e v e r s i o n t h a t a v o i d s C O N S i n g w i l l b e f a s t e r . O f t e n , C O N S i n g i s a v o i d e d
1 4
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
15/20
s i m p l y b y w o r k i n g a t t h e b e g i n n i n g o f t h e l i s t . S t e r l i n g a n d S h a p i r o i l l u s t r a t e
t h i s w i t h t w o a l g o r i t h m s t o t e s t w h e t h e r o n e l i s t i s a s u b l i s t o f a n o t h e r .
A n o t h e r w a y t o a v o i d C O N S i n g i s t o b u i l d s t r u c t u r e s b y p r o g r e s s i v e i n s t a n t i -
a t i o n r a t h e r t h a n b y c o p y i n g . M o s t P r o l o g p r e d i c a t e s t h a t m o d i f y s t r u c t u r e s
d o s o b y b u i l d i n g , f r o m t h e o r i g i n a l s t r u c t u r e , a n e w o n e t h a t i s d i e r e n t i n
s o m e w a y ; a p p e n d , r e v e r s e , a n d s i m i l a r l i s t m a n i p u l a t i o n s a r e f a m i l i a r e x -
a m p l e s . T h e a l t e r n a t i v e i s t o a d d i n f o r m a t i o n t o a s t r u c t u r e b y i n s t a n t i a t i n g
p a r t s o f i t t h a t w e r e o r i g i n a l l y u n i n s t a n t i a t e d .
F o r e x a m p l e , t h e l i s t a , b , c | X ] c a n b e t u r n e d i n t o a , b , c , d | Y ] , w i t h o u t
C O N S i n g , s i m p l y b y i n s t a n t i a t i n g X a s d | Y ] . S u c h a l i s t , w i t h a n u n i n s t a n -
t i a t e d t a i l , i s c a l l e d a n o p e n l i s t . T h e s a m e p r i n c i p l e c a n b e u s e d t o b u i l d
o p e n t r e e s a n d o p e n d a t a s t r u c t u r e s o f o t h e r s h a p e s .
T h e p r o b l e m w i t h a , b , c | X ] i s t h a t t h e o n l y w a y t o g e t t o t h e X i s t o w o r k
d o w n t h e l i s t s t a r t i n g a t a . A l t h o u g h t h i s d o e s n o t r e q u i r e C O N S i n g , i t d o e s
t a k e t i m e . P r o c e s s i n g c a n g o f a s t e r i f a n o t h e r i n s t a n c e o f X i s k e p t o u t s i d e
t h e l i s t w h e r e i t c a n b e a c c e s s e d d i r e c t l y . T h e r e s u l t i n g s t r u c t u r e i s c a l l e d a
d i e r e n c e l i s t a n d h a s t h e f o r m
f ( a , b , c | X ] , X )
w h e r e f i s a n y t w o - a r g u m e n t f u n c t o r ; t h e i n x o p e r a t o r s / a n d - a r e o f t e n
u s e d f o r t h e p u r p o s e , a n d t h e a b o v e l i s t i s w r i t t e n a , b , c | X ] - X o r t h e l i k e .
D i e r e n c e l i s t s c a n b e c o n c a t e n a t e d v e r y q u i c k l y | o n c e | b y i n s t a n t i a t i n g
t h e t a i l o f t h e r s t l i s t t o t h e w h o l e o f t h e s e c o n d l i s t . T h e r s t l i s t t h e n b e -
c o m e s t h e r e s u l t o f t h e c o n c a t e n a t i o n ; t h e r e i s n o t h i r d , c o n c a t e n a t e d , l i s t t o
b e p r o d u c e d . T h i s i s t h e P r o l o g e q u i v a l e n t o f t h e L I S P f u n c t i o n R P L A C D . I t
i s s o m e w h a t l e s s d e s t r u c t i v e b e c a u s e , l i k e a l l P r o l o g i n s t a n t i a t i o n s , d i e r e n c e
l i s t c o n c a t e n a t i o n s a r e u n d o n e u p o n b a c k t r a c k i n g .
1 5
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
16/20
1 2 C o n c l u s i o n
A l l t h e s e t e c h n i q u e s f o r i m p r o v i n g e c i e n c y s h a r e a c o m m o n t h r e a d { a w a r e -
n e s s o f p r o c e d u r a l a s p e c t s o f a d e c l a r a t i v e l a n g u a g e . T h i s d o e s n o t m e a n t h e y
a r e a l l l o w - l e v e l , i n e l e g a n t \ t r i c k s " t h a t p u r i s t s s h o u l d i g n o r e .
S o m e o f t h e t e c h n i q u e s a r e l o w - l e v e l , s u c h a s i n d e x i n g a n d t a i l r e c u r s i o n
o p t i m i z a t i o n . P r o l o g w o u l d s t i l l b e P r o l o g i f t h e s e f e a t u r e s w e r e e l i m i n a t e d
o r c h a n g e d r a d i c a l l y . T h e d e c i s i o n t o i n d e x o n t h e p r i n c i p a l f u n c t o r o f t h e
r s t a r g u m e n t i s c e r t a i n l y a r b i t r a r y , a n d i f i n d e x i n g w e n t a w a y t o m o r r o w ,
s o m e p r o g r a m s w o u l d l o s e e c i e n c y b u t n o n e w o u l d l o s e c o r r e c t n e s s .
O t h e r t e c h n i q u e s , h o w e v e r , a r e p u r e l y a l g o r i t h m i c . E v e n w h e n s t a t e d d e c l a r -
a t i v e l y , a l g o r i t h m s c o n s i s t o f s t e p s , a n d o n e a l g o r i t h m c a n h a v e m o r e s t e p s
t h a n a n o t h e r . I t w i l l a l w a y s b e f a s t e r t o t e s t t h e s e t - e q u i v a l e n c e o f l i s t s b y
s o r t i n g t h a n b y p e r m u t i n g , s i m p l y b e c a u s e t h e r e a r e t o o m a n y p e r m u t a t i o n s ,
a n d n o c o n c e i v a b l e i m p l e m e n t a t i o n c a n c h a n g e t h i s f a c t .
B e t w e e n t h e t w o e x t r e m e s a r e d a t a - s t r u c t u r e - d e p e n d e n t t e c h n i q u e s s u c h a s
w o r k i n g a t t h e b e g i n n i n g o f a l i s t . T h e r s t e l e m e n t o f e v e r y l i s t i s t h e m o s t
a c c e s s i b l e , n o t b e c a u s e o f s o m e q u i r k o f i m p l e m e n t a t i o n , b u t b e c a u s e t h e
u n d e r l y i n g s e m a n t i c s o f P r o l o g s a y s t h a t a , b , c ] i s r e a l l y . ( a , . ( b , . ( c , ] ) ) ) .
A n o p t i m i z i n g i m p l e m e n t a t i o n m i g h t p r o v i d e f a s t e r a c c e s s t o l i s t e l e m e n t s
t h a t a r e t h e o r e t i c a l l y h a r d t o g e t t o , j u s t a s a n o p t i m i z i n g F o r t r a n c o m p i l e r
c a n m o v e c e r t a i n s t a t e m e n t s o u t s i d e o f l o o p s , b u t o n e s h o u l d n o t r e l y o n t h e
i m p l e m e n t o r t o m a k e t h e l a n g u a g e m o r e e c i e n t t h a n i t s s e m a n t i c s c a l l s f o r .
A c k n o w l e d g e m e n t
I w a n t t o t h a n k D o n P o t t e r f o r h e l p f u l s u g g e s t i o n s . A l l o p i n i o n s a n d e r r o r s
i n t h i s p a p e r a r e o f c o u r s e m y o w n .
R e f e r e n c e s
1 ] D . H . D . W a r r e n a n d L . M . P e r e i r a . \ P r o l o g | T h e L a n g u a g e a n d i t s
I m p l e m e n t a t i o n C o m p a r e d w i t h L i s p , " A C M S I G P L A N N o t i c e s , V o l .
1 6
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
17/20
1 2 , N o . 8 , A u g u s t 1 9 7 7 , p p . 1 0 9 { 1 1 5 .
2 ] Q u i n t u s P r o l o g U s e r ' s G u i d e , Q u i n t u s C o m p u t e r S y s t e m s , M o u n t a i n
V i e w , C a l i f . , v e r s i o n 1 1 f o r r e l e a s e 2 . 0 , 1 9 8 7 , p . 9 8 .
3 ] U s i n g t h e A r i t y / P r o l o g I n t e r p r e t e r a n d C o m p i l e r , A r i t y C o r p o r a t i o n ,
C o n c o r d , M a s s . , 1 9 8 7 , p . 1 0 4 .
4 ] A L S P r o l o g 1 . 2 , A p p l i e d L o g i c S y s t e m s , S y r a c u s e , N . Y . , 1 9 8 8 .
5 ] R . A . O ' k e e f e , \ O n S t r i n g C o n c a t e n a t i o n , " P r o l o g D i g e s t , V o l . 5 , N o . 1 0 0 .
6 ] A r i t y / P r o l o g 5 . 0 , A r i t y C o r p o r a t i o n , C o n c o r d , M a s s . , 1 9 8 7 .
7 ] B u i l d i n g A r i t y / P r o l o g A p p l i c a t i o n s , A r i t y C o r p o r a t i o n , C o n c o r d , M a s s . ,
1 9 8 6 , p . 2 5 .
8 ] C . S . M e l l i s h , \ S o m e G l o b a l O p t i m i z a t i o n s f o r a P r o l o g C o m p i l e r , " J o u r -
n a l o f L o g i c P r o g r a m m i n g , V o l . 2 , 1 9 8 5 , p p . 4 3 { 6 6 .
9 ] S . K . D e b r a y a n d D . S . W a r r e n , \ A u t o m a t i c M o d e I n f e r e n c e f o r P r o l o g
P r o g r a m s , " P r o c e e d i n g s , 1 9 8 6 S y m p o s i u m o n L o g i c P r o g r a m m i n g , I E E E
C o m p u t e r S o c i e t y , p p . 7 8 { 8 8 .
1 0 ] L . S t e r l i n g a n d E . S h a p i r o , T h e A r t o f P r o l o g : A d v a n c e d P r o g r a m m i n g
T e c h n i q u e s , M . I . T . P r e s s , C a m b r i d g e , M a s s . , 1 9 8 6 , p . 1 9 4 .
1 7
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
18/20
F i g u r e 1 .
M e m o r y r e p r e s e n t a t i o n s o f t w o s t r u c t u r e s .
f ( ` W h a t a l o n g a t o m t h i s i s ' ,
` W h a t a l o n g a t o m t h i s i s ' ,
` W h a t a l o n g a t o m t h i s i s ' )
f
What a long ...
Symbol Table
g ( a a a a a , b b b b b , c c c c c ) .
Symbol table
g
aaaaa
bbbbb
ccccc
ddddd
1 8
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
19/20
F i g u r e 2 .
I n t e r n a l r e p r e s e n t a t i o n o f t h e l i s t 9 7 , 9 8 , 9 9 ] ( e q u i v a l e n t t o t h e s t r i n g
" a b c " ) .
Symbol Table
97 98 99[]
.
1 9
7/29/2019 Covington Efficient PrologCovington-Efficient-Prolog
20/20
F i g u r e 3 .
R e c u r s i o n d o e s n o t c o n s u m e m e m o r y i f t h e r e c u r s i v e c a l l i s t h e v e r y
l a s t s t e p o f t h e c a l l i n g p r o c e d u r e .
% T h i s p r e d i c a t e i s t a i l r e c u r s i v e
% a n d c a n r u n f o r e v e r .
t e s t 1 : - w r i t e ( h e l l o ) , n l , t e s t 1 .
% T h i s p r e d i c a t e i s n o t t a i l r e c u r s i v e
% b e c a u s e t h e r e c u r s i v e c a l l i s n o t l a s t .
t e s t 2 : - t e s t 2 , w r i t e ( h e l l o ) , n l .
% T h i s p r e d i c a t e i s n o t t a i l r e c u r s i v e
% b e c a u s e i t h a s a n u n t r i e d a l t e r n a t i v e .
t e s t 3 : - w r i t e ( h e l l o ) , n l , t e s t 3 .
t e s t 3 : - w r i t e ( g o o d b y e ) .
% T h i s p r e d i c a t e i s n o t t a i l r e c u r s i v e
% b e c a u s e a s u b g o a l h a s a n u n t r i e d a l t e r n a t i v e .
t e s t 4 : - g , w r i t e ( h e l l o ) , n l , t e s t 4 .
g : - w r i t e ( s t a r t i n g ) .
g : - w r i t e ( b e g i n n i n g ) .
2 0