Covington Efficient PrologCovington-Efficient-Prolog

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