• Nenhum resultado encontrado

Projeto e implementação de um interpretador PROLOG básico.

N/A
N/A
Protected

Academic year: 2021

Share "Projeto e implementação de um interpretador PROLOG básico."

Copied!
123
0
0

Texto

(1)
(2)
(3)
(4)
(5)

I. i:il£222i22 1

1. ü i A £5£:£A ÎliSi DA LIMaii⣣U ££2LE5 2

2. ££22I2£:£i I EUU£Siî £2S2UIIQâS &

2-1. Iair

fi

dy£22 £

1- i- 2 ££AÇ!i£î'io 2 2 C l £ 2- ••

2«2- 2 Ecaditada lien a Imarcuih^ I

£un*2aa 22ûiiiis!u5 2

it. t o u r n a s I£flfilU5 EUHfiiHEllUIS 12

2- 121 Ii 22 1ÜI1EEE2IÄ22E li

6. ÜS£L£U£HIÄ£5fl IS

£.1- IolCfidusSs 12

£•2- 2 Ecaaraaa a sua üal£ulu£a&äa 2i

6-1- A EasaluaSa da 21 Su.au Ia 5 ïaia 26

I n i C A d J U i S â 2 2

i.A.i. 2 Eiaç-isa

â£Sfliyiiïfl 25

£.á-2-i. £ nádula ££aaly.a21aja;íâia 2 £

á.i-2-2. 2

rçSdJ-la ^ahaiülslcab 22

£.£•2.2* 2 midila iuaulealançüaSua 21

£«á-2

-Ã- 2 íüSsula âabaStiüattlnâiana 22

£.i-2.I- £ n£4ulfi

2£lC2£âS)s

22

£.£-2.£. 2 üfidula Ia oi a2 la ua 2a í 2â

6*1.2.2.

A £ £ i 2 â l a da afia aa AVitaca

da Er.a*a 22

£.4.2.

2

£ C U Ç £ I Ü de.

22iíiçaa22 a Inil^nçiüâ^a 2é

(6)

a.

RÍIIEÍL:!^ aia LIOS RAEIÍ^S i$

A=e^c:c~ r : SINTAXE DA ;RAM«TICA ADOTADA EM PNF MODIFICADA APÊNDICE l i : cL'vJÇt"-G USADAS NA MANIPULAÇÃO DE A R V R D V A APÊNDICE I I I : P^OJRAMA -CNTC COMPLETO

APeNDIC: I V : -SDCZCURf ÍXEC USADA NA A T I V A Ç T S O DD

INTERPRETAD3R

APt^CICE v: U T I L I Z A Ç S O DC INTERPRETADOR

(7)

b i b i i o t a c a ei a p r e d i c a d o s e funç3es» a sem otimizações elaboradas» t a i s como ? q j e I a para r a c u r s S o a d i r e i t a ) . Seu o b j e t i v o ? nSü aparas p r o v e r uma f e r r a m e n t a para programaçSo em lógica» : o i o tamb?m s e r v i r como ponto de p a r t i d a para f u t u r a s p a s q u i s a s na 5rea de d e s e n v o l v i m e n t o de i n t e r p r e t a d o r a s PKCLCS.

No p r o j e t e co i n t e r p r e t a d o r u t i l i z o u - s a a m e t o d o l o g i a de Constantin© ( v e r , p o r exemplo» Stavans - 1 9 8 1 ) para o D t e r - s e um program? de * S " i l entendimento» manutenção a ampliação. Imolemantado no PASCALVS do IBM-4341» e v i t o u - s a u t i l i z a r as extençCes da l i n g u a g e m PASCAL disponíveis naquele c o m p i l a d o r , f a v o r e c e n d o - s e a oortabilidad*» C:> i n t a r p r a t a d o r . No p r o c e s s o resolutivo» s e g u i n d o - s e van Emden Cl 9 81) 3 Ferguson ( 1 9 3 1 ) , usa-sa o modelo da " S r v o r ? ds prova con e s t r u t u r a s c o m p a r t i l h a d a s " como uma boa maneira de i m p l e m e n t a r a resoluçSo LUSH.

(8)

U N I V E R S I D A D E F E D E R A L D A P A R A Í B A P r ó - K e i t o r i a F'ara A s s u n t o s d o Interior Coordenação Setorial de Fós-Graduação Rua Aprígio Veluso. 882 - Tel (083) 321-7222-H 355

58.100 - Campina Grande - Paraíba

Teu se v e r i f i c a d o a t u a l m e n t e que os m a i o r e s c u s t o s a s s o c i a d o s a 5raa de p r o c e s s a m e n t o da dados orendem-se ao d e s e n v o l v i m e n t o e rr, anutanjão de s o f t w a r e * e q u ? os c u s t o s com harduor.- têm cõfclo n o t a v e l m e n t e . Em f a c e disto» t o r n a - s e cada « e ; mais n ec e =. s* " " i o se d i s : o r de l i n g u a g e n s como PROLOG (PR Ogromming i n LCGic)» c o n s i d e r a d a s de altíssimo nível Cvery hiçn l e v e i programming l a n g u a g e s ) e cue t e n t a n r e d u z i r em m u i t o o t r a b a i n o do p r o g r a m a d o r .

A l i n g j a g e m °R0LJG f o i imolementada o r i g i n a l m e n t e na U n i v e r s i d a d e de • ' a r s e i l l a ( R o u s s e a l - 1 9 7 2 ) como uma

f e r r a m e n t a p r S t i c a par? ?roçr3i<?i'?o em LSgica ( L o g i c

Programming) (Kouialsky - 1 9 7 4 ) . Desde então» o u t r a s implementações vêm surgindo» i n c l u s i v a c o m p i l a d a s ('rlsrr an 1 9 7 7 ) , c o r r o t i n a d a 3 ( C l a r < e t a l i i - 1 9 8 2 ) , c o n c o r r e n t e s ( d o g g e r - 1 9 8 2 ) , a t e . A l i n g u a g e m vem se a o o u l a r i z a n d o eu todo o mundo, a tudo p a r e c e i n d i c a r que a tendência 5 unt3 popularizaç3o cada vez m a i o r , notadamente sabando-se qua JS se a n u n c i a o "Computador de 2 u i n t a Geração"» eu f a s e de d e s e n v o l v i m e n t o no J a o ã c » tendo PROLOG como linguagem b S s i c a *

ainàa m u i t o a p e s q u i s a r em PROLOG. At?

de i m p l e m e n t a r PROLCG» cada implementação outra» como d i z M e l i i s h ( 1 9 8 1 ) :

log systems a r e c o m p l e t e l y a l i < e . T h i s u n l i k e l y t o cnange v e r y q u i c k l y , because

improvements f o r Prolog i m p l e m e n t a t i o n

i a s u n i v e r s i d a d e s pesquisam a linguagem oela l i n g u a g e m tem c r e s c i d o enormemente otadamente n a q u e l e s segmentos l i g a d o s â Inteligência A r t i f i c i a l e Sreas a f i n s .

Quando se t r a t a de i m p l e m e n t a r PROLOG, a o r i n c i p a l d i f i c u l d a d e I a oouca p r o f u n d i d a d e com a q u a l 4 t r a t a d o o a s s u n t o nas o oras disponíveis. Em çaral t a i s obras prendem-se quase que apenas em d e t a l h a r a l i n g u a g e m , suas vantagens e aplicações.

No p r e s e n t e t r a b a l h o ê" dado ênfase ?i implementação* p o i s uns de suas p r i n c i p a i s metas 0 de s e r v i r de oase para

f u t u r a s p e s q u i s a s na Srea de d e s e n v o l v i m e n t o da i n t e r p r e t a c o r e s PROLOG. Este f a t o j u s t i f i c a t e r - s e despendido a maior p a r t e do tempo ne f a s e de p r o j e t o do interpretador» buscando tornã-lo da f S c i l e n t e n d i m e n t o , manutenção e ampliação. F o i com e s t e i n t u i t o que em maio de

5x i s t e » porém q j a n t o as m an e i r a s £ a l g o d i f e r e n t3 dê N

. . no tao Pro 3 1 t u s t ion i s ne u i d a a 3 and ar i C O n s t a n t l y No Bra s i l j S v PROLCG. n u i n t e r e s s

(9)

e aàottr a m e t o d o l o g i a :la C o n s t a n t i n e .

Ou t r a meta a sue s a p r o p 3 e o p r e s e n t e t r a b a l h o ? a de

s e r v i r c om o f e r r ara *n t? para Programação em L3g i c a. F o i e s t a

meta qu e l e v o u a uma no va mudança: ü i n t e r p r e t a d o r e atava

sen do i m p l em en ta do na l i n g u a g e m C, no POP - l l / J N I X No

s eg un do sem as t r 9 de 1 9 3 4 passou a f u n c i o n a r o I 3 M 4 3 4 1

a d q u i r i do oe 1 a 'J F " b . Como grande p a r t e das aplicaçã as da

l i n guag em P ROLO consom a uma boa q u a n t i d a d e de me m8 >-i a , não

dxs p o n l v e i s nc PDP-11 , d e c i d i u - s a , am nove mbro de 1 9 8 4 ,

ab a ndon ar ? ver sã o D, e p a s s a r a imolemantai- em P a s c a l , no

I3M 43 *1 . Î s t 0 ax i g i u e n t r e o u t a s c o i s a s dese nv o l v e r novo s

a n a l i sa dore 3 X éx iço e sintático, j 5 que o s a n t e r l o r e s

estavam se rido 0 a s e n v o I v i d o s com o uso do LEX ? do YACC

d i s po n l v e i s ape na s no UNIX.

Devido ao f a t o de j S e x i s t i r e m v S r i a s o b r a s sobra

programação PR 31 DG ( v i d e , p c exemplo M e l l i s h - 1 9 8 1 ) , a

l i n g u a g e m ãerí! a p r e s e n t a d a s u p e r f i c i a l m e n t e . Assim, no capítJlo 2 í dada uma r S p i d a visão da l i n g u a g e m , m o s t r a n d o -s a a l i , a t r a v 5 -s de um exemplo, a -s i n t a x e a d o t a d a . E» no c a p i t u l o 3, aão a p r e s e n t a d o s os p r e d i c a d o s e funç3es emb u t i c j as. No c a p i t u l o 4 são a p r e s e n t a d o s os c o n c e i t o s teóricos f u n d a m e n t a i s . No 5 $ mostrado i n f o r m a l m e n t e o f u n c i o n a m e n t o do i n t e r p r e t a d o " - , i nt r o du z i n d o-se o c o n c e i t o de " S r v o r a de Prova com e s t r u t u r a s c o m o a r t i l h a d a . No 6 a p r e s e n t a - s e a implementação onde buscou-se um nível de d e t a l h a m e n t o e c l a r e z a t a l , que p e r m i t a a f u t u r o s p e s q u i s a d o r e s m o d i f i c a r e a m p l i a r o i n t e r p r e t a d o r sem grandes d i f i c u l d a d e s . F i n a l m e n t e , no c a p i t u l o 7, são dados, como exemplos, a l g u n s programas que s e r v i r a m de t e s t e p a r a o i n t e r p r e t a d o r .

(10)

3

2- UÜÈ BSEIfiâ 2È ^* E2.ÜLÜ2

Programar em PCGLC G s i g n i f i c a i n t r o d u z i r uma sequência

da f a t o s , r e g r a s a perg un t a s na f orna de c l 5 u s u l a s . To me-se

o p r o b l a m ? de achar o c jsm i n ho an t r a d o i s vértices de um

g r a f o :

Serão c o n s i d aradas como r e ; r ?s:

a) Um caminho e n t r e o s vértic es v i a v j da um g r a f o , ser 5

o Arce ( v i , v j ) , se e s t e a r C O e x i s t i r .

b ) Um caminho e n t r e o s v * r t i c as v i a v j da um g r a f o , sar 5

uma sequência de a r c o s , i n i c i a d a p e l o Arco ( v i , v k ) e

c o n t i n j a d a p a i o ca ninho ( v k , v j ) se e x i s t i r a m e s t e s

arco e caminho.

Serã c o n s i d e r a d o , como exemplo, o g r a f o :

. 0

Passáramos agora ao programa PPCLOG, oíde a cada r e g r a ou f a t o , c o r s s p o n d e r S uma c l S u s u l a .

Jma c l S u s u l a , i n d i c a a existência de uma relação e n t r e z e r o ou mais t e r m o s . Assim:

£x i s te A r c o ( A , 6 ) .

i n d i c a que e n t r a "A" e " 3 " 3 relação " E x i s t e A r c o " 5 v e r d a d e i r a . R relação dS-se o nome de p r e d i c a d o , e aos tarmos e n t r e parênteses, de a r g u m e n t o s .

D nome de jm p r e d i c a d o 5 um c o n j u n t o de c a r a c t e r e s i n i c i a c i o p o r l e t r a m a i O s c u l a , ou um c o n j u n t o de c a r a c t e r e s q u a l q u e r e n t r e apóstrofos, ou a i n d a um símbolo e s p e c i a l ( v e r

(11)

número r e a l , ou um strinç,. Ver arçumanto t i p o strinç no i Itera 3 . 3 ) .

Uma v a r i S v e l I u TI c o n j u n t o de c a r a c t e r e s i n i c i a d o o o r l a t r a minCscula ou " u n d e r s c o r a " . Uma função, por sua vêz ? um termo s i n t a t i c a m e n t e s a m e l h a n t e a um p r e d i c a d o , i s t o 5 , c o n s t i t j l d o p a i o nome da função, com as mesmas características sintáticas que um p r e d i c a d o , s e g u i d o p o r z e r o ou mais argumentos e n t r e parênteses a separados por vírgulas.

Na c l a u s u l a acima, "A" e são funç3es de zero arg uman t o s .

As cIS u s u l a s :

ÊxisteArco ( A , 3 ) . E x i s t s A r c o CB, C ) . ÊxisteArco CB, 0 ) .

r e p r e s e n t a m os f a t o s qua descrevem o g r a f o dado.

Notemos qua toda c l a u s u l a t e r m i n a com um p o n t o Cseguido por espaço b r a n c o , ou nova l i n h a ) .

As raçras oodem ser r e o r e s e n t a das p e l a s clSusulasí

Caminho C v i , vj» A r c o C v i , v j ) ) <- ÊxisteArco C v i , v j ) . Caminho C v i , v j , Seq CArco C v i , v k ) , c a m R a s t ) )

C- ÊxisteArco C v i , v < ) t Caminho Cvk, v j , c a n R e s t ) .

onda o símbolo "<-" C l e r "SE") i n d i c a que o p r e d i c a d o 'a esquerda d e s t e símbolo sarS verdade se a conjunção da todos os p r a d i c s d o s que se encontram *a d i r e i t a d e s t e símbolo, separadas p a i o s i m b o l o "6" Ciar "E") , f o r v e r d a d e .

D p r e d i c a d o s i t u a d o à e s q u e r d a do símbolo "<-" s denominado "cabeça da c l a u s u l a " , enquanto oue a conjunção da p r e d i c a d o s que f i c a m â d i r e i t a d e s t a símbolo ê" chamada de " c o r p o da c l a u s u l a " . Cada p r e d i c a d o que c o n s t i t u i o corpo da cláusula 5 d i t o s e r uma "submeta da c l 5 u s u l a " .

Devemos n o t a r qua cláusulas t a i s como a q u e l a s com as q u a i s r e p r e s e n t a m o s os f a t o s de nosso p r o b l e m a não têm

(12)

corpo» ou s e j a , são compostas apenas p e l a s suas ca secas. E

a i n d a , que v i , v j , v!< e c a t i ^ e s t são variáveis, p o i s i n i c i a m

por l e t r a minúscula.

Q escopo c! a uma variável e s t * l i m i t a d o ã c l a u s u l a onde a variável a p a r e c e . Assim, p o r exemplo, a variável v i aparece nas duas c l ? u s u l a s com as q u a i s reores«ntamos as r e g r a s cie nosso p r o b l e m a , porém o v i de uma c l a u s u l a nada tem a v e r com o v i da o u t r a cláusula.

Todas as cléusulas m o s t r a d a s até agora são "cláusulas d e f i n i d a s " . C I S u s u l a s deste t i o o ao serem r e c o n h e c i d a s p e l o i n t e r p r e t a d o r PROLCG são armazenadas na e s t r u t u r a de dados que forma o oroçrama "RDLOG p r o p r i a m e n t e d i t o . F a l t a - n o s agora f o r m u l a r oerguntas» t a i s como:

" e x i s t e um caminho e n t r e os vértices ( A ) a CD) do g r a f o dado? Qual"?

Esta p e r g u n t a p o d e r ? s e r f o r m u l a d a através da cláusula:

? Caminho CA, D, c am i n r>o °r oc ur ado) .

que é denominada de "cláusula mata".

Uma c l S u s u l a mata ? uma c l S u s u l a que não tem cabeça, ou s e j a é constituída apenas o e l o c o r p o . Ao ser r e c o n h e c i d a , o i n t e r p r e t a d o r a t i v a o r e s o l u t o r de cláusulas metas, que, f a z e n d o uso da e s t r u t u r e de dados na q u a l estão t o d a s as cláusulas d e f i n i d a s r e c o n n e c i d a s até o momento, busca uma solução a t r a v l s de uma resolução LUSH ( v e r e a o l t u l o 4 ) .

(13)

1- E3£21!Ll2i22 2 ZÜ1ÜU2É2

2-1- 10lEfi£ÜJf3Q

P r e d i c a d o s e furçães embutidas são f o r n e c i d a s oara que se c o n s i g a o b t e r c e r t o s r e s u l t a d o s que s e r i a m difíceis ou até mesmo impossíveis de serem o b t i d o s com c l a u s u l a s e funçSes d e f i n i d a s p e l o usuário. Na versão a t u a l , p o r s= t r a t a r de um i n t e r p r e t a d o r oãsico, foram c o l o c a d o s aoenas a q u e l e s c o n s i d e r a d o s indispensáveis. Assim, os p r e d i c a d o s embutiaos resumiram-se ao o r e d i c a d o c o r t e C!) (indispensável, e n t r e o u t r a s c o i s a s , para definição do "Nao") e dos p r e d i c a d o s " l u a r " e " I m p r F a l h a • , de f u n d a m e n t a l importância, j 5 que nenhum r e s u l t a d o será r e t o r n a d o p a r a o usuário a náo s e r a t r a v ? s d e s t e s d o i s p r e d i c a d o s .

No que se r e f e r e às funçSes e m b u t i d a s , foram implementadas apenas as funçães aritméticas de soma (•)» subtração ( - ) , multiplicação ( # ) , divisão i n t e i r a CO» divisão r e a l ( / ) , r e s t o da divisão (Mod), a função s i n a l ( S i n a l ) , e a função c a l c u l o ( ? ) . Esta 0 1 t i n a s e r v i n d o para a t i v a r as demais. Se q u a l q u e r das funções acima não f i g u r a r como argumento de uma função c a l c u l o , será t r a t a d a como uma função d e f i n i d a p e l o usuário, p o r t a n t o não c a l c u l a d a .

0 o r e d i c a d o c o r t e 5 usado como uma submeta de uma

cláusula q j e será verdade na orimsira t e n t a t i v a . Porém se

o c o r r e r um r e t r o c e s s o para e s t a submeta a l a falhará e provocará a f a l h a i m e d i a t a da cláusula e da submeta que f o i i n s t a n c i a d a como e s t a cláusula, mesmo que e x i s t a m o u t r a s cláusulas capazes de i n s t a n c i a r e s t a suDmeta.

Um dos p r i n c i p a i s usos do c o r t e é na definição do p r e d i c a d o "Nao", através das c l S u s u l a s :

£ £r£d.ic.a.;í2 Ç^Ele. ( ! ) Nao(x) <- x L ! L F a l h a . N a o ( x ) . UNIVERSIDADE FEDERAL DA P A R A l B A P r ó - K c i t o r i a P a r a A s s u n t o , d o Interior ia ftpuyiu « o i * ™ . •-• > - - '

(14)

7

-Onde " F a l h a " I uma submeta que n?o deve s e r d e f i n i d a como cláusula pare q J e f a l h e s a m o r a .

Deve-se n o t a r que, se ao ser t e n t a d a a p r i m e i r a cláusula, a submeta " x " f a l h a r , a submeta "!" náo terá s i d o t e n t a d a . P o r t a n t c , no r e t r o c e s s o , ser? t e n t a d a a segunda cláusula» que será v e r d a d e de i m e d i a t o . Se, ao contrário» x f o r verdade» c o r t e será v e r d a d e , porém como a próxima submeta f a l h a i n c o n d i c i o n a l m e n t e o r e t r o c e s s o oara "!" provocará a f a i n a i m e d i a t a de "NaoCx)".

3 p r e d i c a d o " I m p r " é usado como uma submeta que e s c r e v e o v a l o r de seus argumentos e ? verdade na p r i m e i r a t e n t a t i v a , por?m f a l h a e nada e s c r e v e no r e t r o c e s s o . Enquanto que o p r e d i c a d o " I m p r F a l h a " é v e r d a d e na p r i m e i r a t e n t a t i v a , mas nada e s c r e v e . Porém, no retrocesso» e s c r e v e o v a l o r da seus argumentos e f a l h a . E s t e s p r e d i c a d o s a c a i t a m q u a l q u e r nOmero cia a r g u m e n t o s . T a i s argumentos podem s e r d^ q u a l q u e r t i p o , i n c l u i n d o o t i p o s t r i n g , só a c e i t o o o r estes d o i s p r e d i c a d o s . Um argumento t i p o s t r i n g é um c o n j u n t o de c a r a c t e r e s q u a i s q u e r , d e l i m i t a d o p o r aspas. Ouando algum d e s t e s d o i s p r e d i c a d o s e n c o n t r a m um c o n t r a - b a r r a em um s t r i n g , passa a e s c r e v e r os c a r a c t e r e s s e g u i n t e s na próxima l i n h a .

0 programa do caminho e n t r e d o i s vértices de um g r a f o ,

a p r e s e n t a d o no c a p i t u l o a n t e r i o r , embora c o r r e t o , estS i n c o m p l e t o . Da forma como está e s c r i t o , nenhum r e s u l t a d o serS r e t o r n a d o p a r a o usuário. Um programa c o m p l e t o par? a q u e l a problema p o d e r i a s e r e s c r i t o como:

t x i s t e A rc oC A » B ) . E x i staA rcoC 3 , C ) . E x i s t e A r c o C S , D ) .

CaminhoCvi, v j , ArcoCvi» v j ) ) <- =xisteArcoCvi» v j ) . CaininhoC v i , v j , SeqCArcoCvi» v k ) , c a m P e s t ) ) <- E x i s t a A r c o C v i , v k ) Ei Caminho Cvk, v j , c a m R a s t ) . AchaCaminhoCvi, v j ) <- I m p r F a l h a ( "\Nao e n c o n t r a d o caminho "» v i , v j ) & CaminhoCvi, v j , c a m P r o c u r ) í. I m o r C V C a m i n n o e n c o n t r a d o = ", c a m P r o c u r ) . ?AcheCaminhoCA, D ) .

(15)

A r e s p o s t a orociuzida p o r e s t e programa serS:

Caminno e n c o n t r a d o = SeqCArco(A• 3 ) » ArcoCBf 0 ) ) Mao e n c o n t r a d o caminho ZC .

A t a b e l a a o a i x o d e s c r e v e as funç3es embutidas disponíveis:

T I P I S ARGS

TIPO m

FUNCHO. DA

VALOR DA FUNSflO

X * y

FUN;BO

i n t

i n t

i n t + ( K , y ) * i n t * r e a l

r e a l

Soma de x com y • r e a l

i n t * r e a l • * r e a l * r e a l

re a l

i n t

i n t

i n t • -Cx.yD

i n t

r e a l r e a l Diferença a n t r e x e y

r e a l « i n t * r e a l

r e a l * r e a l

r e a l

-Cx)

i n t

-

i n t

Complemento de 10 de x

r e a l

* r e a l

i n t

i n t

i n t

* C x , y )

i n t

r e a l

r e a l « P r o d u t o de x com y

r e a l

i n t

r e a l

r e a l

r e a l

r e 3 l

: ( x , y )

i n t

i n t

i n t

Divisão i n t e i r a de x p o r y m i n t

i n t « r e a l

/(x,yD

i n t

r e a l

r e a l

Divisão r e a l de x oor y

r e a l * i n t # r e a l

(16)

o

Mod

C*,y)

. . .

. int . i n t i n t

. Resto da divisão de x oor y

S i n a l Cx)

.

. r e a l . i n t r s a 1 . - 1 i 0 OU . eero ou 1 para DO Si t i V O x neoa tivo • • r e s p e c t .

Para que q u a l q u e r das funções acim3 assuma o valor-e s p valor-e c i f i c a d o ns t a b valor-e l n acima, a" nvalor-ecvalor-essário quvalor-e s valor-e j a o» ou faça p a r t e do, argumento de uma função c a l c u l o ( ? ) . Assim» por exemplo» se as v a r i S v e i s x* y» z assumirem os v a l o r e s de -2, 3 e S respectivamente» então o v a l o r de ? ( * ( x ( y » z ) ) )

serS - 2 2 .

Com a ajuda d e s t a s funçSes poda-se d e f i n i r p r e d i c a d o s t a i s como o a m o s t r a d o s a b a i x o : I g u a l C x » x ) . ManorCx.yD <- I g u a l C ? C S i n a l C -Cx»y)))»-1). M a i o r C x . y ) <- I g u a l C ? C S i n a l C -Cx,y)))»l). D i f e r e n t e ( x , y ) <- N3oCIgualCx»y)) . K e n o r l g u a K x, y) <- Di f e r ent • C ? C Si na 1 ( - C x * y ) ) ) » l ) . M a i o r I g u a l ( x , y ) <- D i f e r e n t a C ? C S i n a 1( - C x • y ) ) ) ,-1>. AosCx,?C -Cx)D) <- D i f e r e n t e C ? C S i n a l ( x ) ) , - l ) . Abs(x »y).

As c l a u s u l a s que d e f i n e m os p r e d i c a d o s "Nao", "«enor"» " M a i o r " , " l a i o r l g u a l " , " D i f e r e n t e " , " M a n o r l g u a l " , " I g u a l " e "Abs", a p r e s e n t a d a s n e s t e capítulo, podem ser a c r e s c e n t a d a s ao início da cada programa como um dos a r q u i v o s a serem a n a l i s a d o s Cvida apêndice V ) .

UNIVERSIDADE FEDERAL DA P A R A l B A P r ó - K e i t o r i a P a r a A s s u n t o , d o Interior Cooidermçco Sstorid de Pós-Graduação Rua Aprígio Veloso. 882 -Tel (083) 321-7222-11 355

(17)

LU5H a " uma seqjância V ( 0 ) , M C1) • ••• de matas, t a i s que, M(0) = 4 e * K i * l ) 8 o b t i d a :le M ( i ) através de um p r o c a s s c da substituição e unificação. Dependendo das cláusulas d e f i n i d a s em P» ? possível o b t e r zero ou mais derivações M ( i * l ) a p a r t i r da ^ ( i ) . Assim, se c o n s i d e r a r m o s t o d a s as derivações possíveis de cada meta M C i ) , formaremos o qua chamamos de "árvore de o e s q u i s a " .

e n c o n t r a r uma e n c o n t r a r um ramo v a 2 i a . Por o u t r o p e s q u i s a , não f o r não tem soljção, ou

solução para a meta M, s i g n i f i e ? d e s t a "árvore" em que a meta *Kn) s e j a l a d o , se, p e r c o r r i d a t o d a a r v o r a da

e n c o n t r a d a uma meta v a z i a , d i z - s e que M s e j a , a mata f a l h o u .

Uma substituição 5 um c o n j u n t o

{ x l / t l , x n / t n )

de pares "v3riãve1/termo", onde as v a r i f v e i s x l , xn são t o d a s d i s t i n t a s , e " t i " é o "termo a s s o c i a d o " ã variável " x i " .

Uma " i n s t a n c i a " de uma expressão 5 e" q u a l a u e r expressão, designada p o r CCDs ou Es, que pode s e r o b t i d a da E, p e l a substituição simultânea de cada ocorrência de cada variável em E, p a i o r e s o e c t i v o termo a s s o c i a d o de uma

substituição " s " . Se nenhuma variável ocorrer em Es, então

Es :hamad3 "instância a t e r r a d a " de E.

Uma " v a r i a n t e " de uma expressão E, f uma instância Es de 5, c nd a!

s = - C x l / y l , xn/yn)

onda x l , xn são t o d a s as variáveis de r , e y l , yn são q u a i s q u e r variáveis d i s t i n t a s uma das o u t r a s e da x l ,

• . • 1 x n •

Uma substituição u" u n i f i c a duas expressões E l e E2, sa, a somente se, CElOu* = CE21u' ( o u CE23u") * a instância comum de El e £2 d e t e r m i n a d a por u*.

Se El e E2 podam ser u n i f i c a d a s , então ha* um " u n i f i c a d o r mais g e r a l " ( j m g ) de El e E2 se, e somente se, t o d o s os o u t r o s u n i f i c a d o r e s u de E l e E2 são t a i s que CE13u = L" CE 2 3. urtiga s para alguma suostituição s.

(18)

11

-5 - ILiíL l'AELEUAL 2E I j I i £ E £ i I i £ 2 £

• i n t e r p r e t a d o r f u n c i o n a de modo que» a cada cláusula reconhecida» se e l a f o r uma cláusula d e f i n i d a ,

uma e s t r u t u r a de dados adequada de forma f a c i l m e n t e o p o s t e r i o r acesso a mesma, como q u a l q u e r dos e l e m e n t o s que a c o n s t i t u e m ; ou, cláusula meta, ouses uma solução c o n s t r u i n d o p r o v a com e s t r u t u r a s c o m p a r t i l h a d a s . armazena-a em a p e r m i t i * -uffl todo» ou a se f o r uma uma árvore de Uma "árvore de p r o v a " I uma e s t r u t u r a de dados que armazena, de uma maneira não r e d u n d a n t e , o caminho, em uma árvore de p e s q u i s a , e n t r e a r a i z e o nô" a t u a l .

0 c o m p a r t i l h a m e n t o da e s t r u t u r a s b a s e i a - s e no f a t o de que as v r ^ i S v a i s são as únicas p a r t e s de uma cláusula que mudam nas d i f e r e n t e s instâncias da mesma, o que t o r n a possível armazenar a p a r t e não variável da cláusula uma Cnica v e z . Desta f o r m a , cada instância c o n s i s t i r a " de u« v e t o r , r e p r e s e n t a n d o as variáveis, denominado de c o n t e x t o , a ura a p o n t a d o r oara o cédigo da cláusula.

Chama-se da "código da cláusula" a e s t r u t u r a de dados que armazena uma cláusula, onde as v a r i S v e i s são s u b s t i t u i d a s por Índices que identificarão sua posição no c o n t e x t o de cada instância.

0 c o n t e x t o 5» p o r sua vez» também apontadores» cada um d e l e s apontando p a r a o à v a r i S v e l correspondente» ou para uma a p o n t a d o r e s para aquele t e r m o .

formado o o r termo a s s o c i a d o

sequência da Esta idéia será melhor e s c l a r e c i d a a s e g u i r , quando u t i l i z a r e m o s os diagramas de Ferguson ( 1 9 3 1 ) oara i l u s t r a r as várias f a s a s p o r que passa a árvore de p r o v a na resolução do programa-exemplo que e n c o n t r a , se e x i s t i r , um caminho e n t r e d o i s vértices de um g r a f o . 0 cediço das cláusulas d e f i n i d a s pode s e r e s c r i t o comol ( 1 ) E x i s t e A r c o ( A , E ) . ( 2 ) E x i s t e A r c o ( 3 , C ) . ( 3 ) E x i s t e A r c o ( 8 , D ) . ( 4 ) Caminho C _ l , _ 2 , Arco ( _ 1 , _ 2 ) ) <- E x i s t e A r c o (_1» _ 2 ) . ( 5 ) Caminho ( _ 1 , _ 2 , Saa ( A r c o ( _ 1 , _3)» _ 4 ) ) <- E x i s t e A r c o ( _ 1 , _ 3 ) & Caminho (_3» _ 2 , _ 4 ) .

(19)

e o cediço da c láusu 1 a-me t a pode-se e s c r e v e r como: ? Caminho ( A , C,

onde _ 1 i _ 2, ... i n d i c a m os índices das v a r i 5 v e i s no c o n t e x t o de cada instância» não i m p o r t a n d o os nomes com os q u a i s o u s u S r i c i n t r o d u z i u t a i s variáveis.

No diagrama de " e r g u s o n , semi-círculos s u p e r i o r e s r e p r e s e n t a m as submetas; semi-círculos inferiores» as cabeças das cláusulas; e» cada c o n j u n t o de um s e m i - c l r c u l o i n f e r i o r l i g a d o a z e r o ou mais semi-círculos s u p e r i o r e s , uma cláusula. Lma unificação § r e o r e s e n t a d a p e l a união de um semí-círculo s u o e r i o r com um s e m i - c l r c u l o i n f e r i o r , formando um círculo c o m p l e t o . Este círculo c o m p l e t o 5 um n5 da árvore

de prova. Nos semi-círculos i n f e r i o r e s r e p r e s e n t a m o s

tamofiu, quando e x i s t e , cada variável do c o n t e x t o por um par de colchetes» cio q u a l p a r t a um a r c o Cem l i n h a t r a c e j a d a ) , r e p r e s e n t a n d o o a p o n t a d o r oara o termo a s s o c i a d o a q u e l a variável. Jm par de c o l c h e t e s sem e s t e arco» i n d i c a que a variável a i n d a não f o i i n s t a n c i a d a .

A construção do diagrama (5 i n i c i a d a p e l a criação do n5 r a i z (círculo completo)» c o n t e n d o o c o n t e x t o da c l S u s u l a -meta» e ao q u a l estarão l i g a d a s as submetas (semi-círculos

s u p e r i o r e s ) da cláusul3-meta. Esta f a s e do diagrama» p a r a o exemplo considerado» * mostrado na f i g u r a 1» onde podemos n o t a r que, como a clãusula-meta s6 contém uma varifivel» apenas um p a r da c o l c h e t e s aparece no n5 r a i z .

F i g u r a IS Fase i n i c i a l da árvore de p r o v a :

A submeta no s e m i - c l r c u l o s u p e r i o r pode ser i n s t a n c i a d a com a cláusula ( 4 ) , o b t ? n d o - s e a Srvore da f i g u r e 2.

(20)

- 1 2

F i c a r a 2: írvors de p r o v a a p c s instanciação com a c l a u s u l a ( 4 ) .

T e n t a - s e s g o r S i n s t a n c i a r a suometa n ã" o i n s t a n c i a d a c o n

BS c i c u s u l a s cio programa. =alha-se» e r e t r o c e d a - s e p a r a o _

e s t a d o mostrado na f i g u r a 1 . Então, i n c t sn c i a- se a submeta" com a c l a u s u l a ( 5 ) , o b t e n d o - s e a S r v c r e da f i g u r a ( 3 ) .

UNIVERSIDADE FEDERAL DA P A R A l B A P r ó - K e i t o r i a P a r a A s s u n t e » cin Interior

Coordenação Setorial de Pós-líraduação Rua Aprígio Veluso. 882 - Tel (083) 321 7222-K 355

(21)

Fiçjra ?: írvore de p r c v j E O Í S r ? t r D C ? s s o p a r a o

e s t a d o da f i ç J r 1 e instanciação com a cláusula ( 5 ) .

Das duas submetas não i n s t a n c i a d a s toma-se a mais a esquerda e i n s t a n c i a - s e com a c l S u s u l a C D » r e s u l t a n d o na árvore de p r c v a i l u s t r a d a na f i g u r a 4. Como a cláusula C l ) não tem coroo» d i z - s e que a submeta f o i r e s o l v i d a .

(22)

R e t o r n a - s e ao n£ p a i e e n c o n t r a - s e uma s u b n e t s não r e s o l v i d o . Esta submeta t instância d a com a clásusula C O » como mostrado na f i g u r a 5.

(23)

A ncvr Submeta ? s:r i n s t a n c i a d a não o pode ser com ?s

cláusulas C l ) e C l ) , nas o pode com <r C3). C O T O <? v i s t o na

f i g u r a S .

UNIVERSIDADE FEDERAL DA PARAlBA P r ó - K r i t o r i a P a r a A n n n t o , d o Interior Coordenação Setorial de ^s-Graduaçflo Rua Aprígio Veloso. 882 Tel (083) 321 -7222-R 355

(24)
(25)

-Retornando-se ao n5 pai» não se encontram submetas a i n s t a n c i a r . D i z - s a então que também e s t a submeta f o i r e s o l v i d a . Vai-se s u b i n d o na árvore de prova am busca de uma submeta não r e s o l v i d a até chegar ao ní r a i z . Chegando-se ao nfl r a i z e nüo e x i s t i n d o nennuma submeta a rasolver» como é o caso» d i z - s a qua a meta f o i r e s o l v i d a .

(26)

19

-&• I*£wf

M£-Iâ£S£

6-1. í m i U U t S ;

O I n t e r p r e t a d o r f o i implementado eu PASCAL» no I B * 4 3 4 1 , f u n c i o n a n d o sob o s i s t e m a o p e r a c i o n a l VM/CMS. Embora c o m p i l a d o p e l o ^ASCAL/VS, n?o foram u t i l i z a d a s as extençóes disponíveis n a q u e l e c o m p i l a d o r , f a v o r e c a n d o - s e assim a p o r t a b i l i d a d e do i n t e r p r e t a d o r .

Qs mecanismos d e s c r i t o s i n f o r m a l m e n t e no c a p i t u l o 5, passam, a p a r t i r de a g o r a , a s e r d e s c r i t o s d e t a l h a d a m e n t e .

A e s t r u t u r a de dados que p e r m i t e a c e s s a r f a c i l m e n t e o código das c l S u s u l a s como um t o d o ou a q u a l q u e r das p a r t e s que a c o n s t i t u e m , como c i t a d o no c a p i t u l o 5, ser? d e t a l h a d a em 6.2.

Um " g r a f i c o e s t r u t u r a d o " , constituído segundo a m e t o d o l o g i a da C o n s t a n t i n e ( v e r , por axmplo, Stevens - 1931) contendo os p r i n c i p a i s módulos do i n t e r p r e t a d o r , assim como o código, em P a s c a l , de seu programa p r i n c i o a l , são dados en 6.3.

F i n a l m e n t e , em 6.4, <? mostrado como se p r o c e s s a a resolução de uma c l a u s u l a meta. A l i f o i usada» s e g u i n d o

B r u y n o o g h e ( 1 9 3 0 ) e ce r g u s o n ( 1 9 8 1 ) a técnica de se d i s t i n g u i r

nós determinísticos da não determinísticos. Diz-se que um nó ê não determinístico quando e x i s t e m c l 5 u s u l a s não t e n t a d a s , com mesmo nome no p r e d i c a d o da cabeça que a submeta i n s t a n c i a d a no nó. Desta forma em cada r e t r o c e s s o busca-se l o g o o nó não determinístico mais r e c e n t e m e n t e i n s t a n c i a d o , e l i m i n a n d o - s e de i m e d i a t o , t o d o s os nós determinísticos i n s t a n c i a d o s após o mesmo. Decorre d a l não apenas uma maior eficiência, como também uma redução na érea de memória u t i l i z a d a p e l a a r v o r e de p r o v a , j S oue nos nós determinísticos não são armazenadas as informações necessárias ao r e t r o c e s s o .

(27)

As informações r s f s r s n t e s a cada símbolo ( i s t o ?, nome de p r e d i c a d o ou função) do programa são armazenados em uma t a b e l a de s l m o o l o s ( T a b S i m b ) . Os e l e m e n t o s dessa t a b e l a podam ser acessados através da a p o n t a d o r e s c o n t i d o s em uma t a b e l a dash ( T s b H a s h ) . Cada e l e m e n t o da t a b e l a de símbolos contém informações r e f e r e n t e s a um nome de p r e d i c a d o ou função em estruturasí

; t y p e TElemTabStmu = r e c o r d ComarNome í TComprNome ;Noma : TSimbolo

;GpoCls : TApGpoCls

;ApNomaColisor : TApElemTabSimb ; en d

onde AoNomaColisor ? um a p o n t a d o r para uma e s t r u t u r a TElamTabSimb de um símbolo que tem o mesmo índice Hash a GpoCls é um a p o n t a d o r para o grupo de cláusulas ( e s t r u t u r a TGpoCls m o s t r a d a a s e g u i r ) .

C l a u s u l a s que tem mesmo nome como p r e d i c a d o das cabeças são agrupadas em e s t r u t u r a s d e f i n i d a s em P a s c a l como:

; t y p e TSpoCis = r e c o r d T i p o : ( D e f i n i d a , E m o u t i d a ) ;^ArgsCabec : TNArçsCabec ; ? r i m C l a u s : TApClaus ; end

onde o segundo e t o r c e i r o campos r e f e r e n c i a m o número de argumentos da cabaça e um a p o n t a d o r oara a o r i m e i r ? . c l a u s u l a do çruoo, r e s p e c t i v a m e n t e . Cada c l a u s u l a § r e o r e s e n t a d a numa e s t r u t u r a : ; t y p e TClaus = r e c o r d NVars : T I n d V a r ;Cabaca : TApPredOuFunc ;PrimSMeta : T Ap SM Ou Ar 3 ;ProxClaus : TApClaus ; end

(28)

2 1

-saneio "NVars" o número de variáveis da c l a u s u l a e "Cabaça",

"PrimSMeta", "Pf-oxClaus" a p o n t a d o r e s para a cabaça, p r i m e i r a

submeta da c l S u s u l a e próxima cláusula do g r u o o , r e s p e c t i v a m e n t e .

Suometa ou Argumento s3o r e p r e s e n t a d o s p o r e s t r u t u r a s :

; t y p e TSWOuArg = r e c o r d ProxMCuArg í TApS^OuArg Jcasa Tioo:TTipoSM3uArg of NJInt: ( V a l o r l n t e i r o : m t e g e r ) ; N R e a l : ( V a l o r R e a l : r e a l ) ;Variável:CTndOaVariavei: T I n d V a r ) ;PradOuFunc:(ApPradOuFunc: TApPredCuFunc) ; C a r a c S t r : ( V a l c r C a r a c : ch ar ) ; an d

onde " I n d D a V a r i a v e l " 5 o Índice da variável do c o n t e x t o a ApPredCuFunc um a p o n t a d o r para uma e s t r u t u r a TpredCuFunc d e s c r i t a a s e g u i r .

F i n a l m e n t e e s t r u t u r a s !

t / p e TPredCuFunc r e c o r d Nome : TApElemTabSimb ;PrimArg : TApSMDuArg ; end

r e p r e s e n t a m cada p r e d i c a d o ou função. Nome e PrimArg são» r e s p e c t i v a m e n t e a p o n t a d o r e s p a r a um elemento da t a b e l a de slmDolos e oara o p r i m e i r o argumento do p r e d i c a d o ou função.

As e s t r u t u r a s d e s c r i t a s serão i l u s t r a d a s u t i l i z a n d o o programa do c a o l t u l o 5. As cláusulas ( 1 ) e ( 2 ) constituirão o grupo Gl i l u s t r a d o na f i g u r a 7. As cláusulas ( 3 ) , ( 4 ) a ( 5 ) um o u t r o grupo G2, nSo m o s t r a d o . A e s t r u t u r a da cláusula ( 6 ) , p o r se t r a t a r de cláusula meta, não costituirã um g r u p o , sendo e l i m i n a d a após o p r o c e s s o r e s o l u t i v o . Por f i m , na f i g u r a 8 ó i l u s t r a d a a t a b e l a TabHash e as e s t r u t u r a s TElemTabSimo c o n t e n d o os nomas de t o d o s os p r e d i c a d o s e fjníóes do c i t a d o p r o g r a m a .

(29)

TGpoCls ,Tipo= D e f i n i d a NArgsCabeca=3 , P r i m C l a u s .NVars •Cabeça . PrimSMe t a . P r o x C l a u s

Hua Aprígio Veluso. 882 - Tel. (083) 321-7222-R 355 58.100 - Campina Grande - Paraíba

T^raciDu^unc TSMOuArg . N D rr. e » . P ri.T. A r o TSrOuAr-.ProxS^OjArg . T i p o = Variável .TndDaVariavel=T, .ProxSKDuAr: . T i o o = P r e d C u F j r v . Ap^redDu^unc TSMOuArg .FrcxS''Guírç • T i p 3 = V c r i a v e l . I n d 3 a V a r i a v e l = l TSMOjArç 3r o x 3 M r u A r g T i p o = V a r i e v e l I n d D a V a r i a v e l5 TSMDuArg ProxSMOuArg T i p o = V a r i a v e 1 IndCaVariave1=2. TSMOuSrg . ^roxSMDuArç . Tipo = PredOuFuncis . üpPredOuFunc T Predüurunc •None . 3 r i m A. r 3 TSMDuArg ProxSviOuArg T i p 0 = V a r i a ve1 I n d D a V a r Í 3 V 9 l= l TS«OuArg . P r c x SMO u A r ç - T i p o = Variável • I n d D a V a r i a v e l = 2

onde C2 a p o n t a oera a e s t r u t u r a TClaus d? cláusula 2 (não

i l u s t r a d a ) e Ml 9 N2 e ti3 para s s t r u t j r a s TElamTabSimb

i l u s t r a d a na f i i • P •

F i g u r a 7: E s t r u t u r e s cie um çjrupo de c l f u s u l a s ( g r u p o Gl do p r o gr am 3— e x e m p 1 o )

(30)

-T a o H 3 s h T E1 errlaoSima C o m o r N o T. e = 7 Nom? = Cr .ninho GpoCls • ApNomeColisor ComprNone = A Noma = Arco GpoCls ApNomsColisar Compr'JcT, e = 10 f» orna = E x i s t e A r c o GpoCls • A p N o m e C o 1 i s o r CcmprNo-ne = ? Noma = S e q GpoCls . ApN omeC o l i s or ComprNone = 1 N orne = A GpoCls ApNomeColisor ComprNome Nome = C GD O C I S a— ApNomsColisor ComprNome = 1 Nome = D GooCls ApNomeColisor ComprNome = 1 Nome = 5 r - n r i -t * ComprNome = 1 Nome = 5 r - n r i -t * U ^ O w 1 3 • • ApNomeColisor F i g u r a 8 : T a b e l a hash e e s t r u t u r a s TElenTabSimb program 3 - e x e m p l o .

(31)

O programa f o i d e s e n v o l v i d o s e g u i n d o , embora de um

maneira não r i g o r o s a , a m e t o d o l o g i a de Constantin©. :o r a n

a d m i t i d o s , oor exsmolo, o uso de algumas v a r i S v e i s g l o b a i s , características próprias da n a t u r e z a do orogrema,

variáveis são u t i l i z a d a s em quase t o d o s os d e v i d o a

onde t a i s mõa u l os .

r e s u l t a n t e é dado na f i g u r a 9. 3s p r i n c i p a i s módulos do gráfico e s t r u t u r a d o Segue-se o código do programa p r i n c i p a l , em P a s c a l :

; o e g i n f o r IndTabHash := 0 t o I n dMa x T a b H a s h do TabHash CIndTabHash3 := n i l ; C r i aEmb ut i d os ;0btenhaClau3 ( C l a u s ) íuihile C l a u s O n i l do o e g i n i f C l a u s -> .Caoeca O n i l t h e n ArmazeneClausDef ( C l a u s ) e l s e Reso1vaClausMe ta ( C l a u s ) ; 0 b t e n n a C l 3 u s ( C l a u s ) e nd end 3 módulo " C r i e E m b u t i d o s " c r i a na t a b e l a de símbolos as

e s t r u t u r a s c o n t e n d o os nomes dos p r e d i c a d o s e funções emb u t i d as.

" 0 b t e n h a C l a u s " a n a l i s a s i n t a t i c a m e n t a o a r q u i v o f o n t e formando a e s t r u t u r a da cláusula r e c o n h e c i d a já na memória do c o m p u t a d o r . Por f a c i l i d a d e , a a n S l i s e u t i l i z a a técnica " d e s c e n d e n t e r e c u r s i v a " ( v e r , p o r exemplo, G?IES - 1 9 7 1 ) . Por se t r a t a r da uma t l c n i c a amolamante c o n h e c i d a , não serão d e t a l h a d o s e s t a s módulos. Porém podarão ser v i s t o s na l i s t a g e m do programa f o n t e , dada no apêndice I I I . No apêndice I é dada, em BNF m o d i f i c a d a , a gramática u t i l i z a d a .

"ArmazanaCiausOef" toma a e s t r u t u r a de uma cláusula d e f i n i d a , o b t i d a p o r " G b t e n h a C l a u s " , e a armazena numa e s t r u t u r a "TGpoCls".

F i n a l m e n t e , " R e s o l v a C l a u s M e t a " toma 3 e s t r u t u r a de uma cláusula meta o o t i d a p o r " O o t e n h a C l a u s " e e x e c u t a o p r o c e s s o r e s o l u t i v o . Ao f i n a l d e s t e p r o c e s s o , e l i m i n a essa e s t r u t u r a .

(32)

23

-CrieNoDeterrr

CONVENÇCES

M ativação dos módulos Ml,M2»...»Mn, mesma

ordem, p e l o módulo H. M 3 Ml ... n

ativação dos módulos Ml,M2»...»Mn, mesma ordem, p e l o módulo H.

ativação dos módulos Ml,M2»...»Mn, mesma ordem, p e l o módulo H.

Ativação de m 5 d u 1 c s em I c o p .

Ativação da módulos c o n d i c i o n a l m e n t e .

rIÕU"A 9- G r ? f i c o E s t r u t u r a d o com os p r i n c i p a i s módulos oc oroerama.

(33)

6-á-i- i m £ £ U Í 2 £

3 p r o c e s s o de resolução

dito» u t i l i z a o c o n c e i t o de c o m p a r t i l h a d a s . Por questão de implementação» todos os elemen p r o v a são armazenados no array

de C I S u s u l a Meta» como f o i árvore de p r o v a com e s t r u t u r a s

eficiência a f a c i l i d a d e de tos c o n s t i t u i n t e s da S r v o r e de

• A r v P r o v a " d e f i n i d o como:

;var A r v P r o v a : a r r a y CO..ConprArv0rova3 o f TElemArv

onde TElemArv poderá" ser um i n t e i r o r e p r e s a n t a t i v o de uma

posiçãc de A r v P r o v a , um a p o n t a d o r para uma submeta ou

argumento» ou um apontador para uma clSusula» conforma d e f i n i d o a b a i x o :

; t y p e TElemArv = r e c o r d casa TTipoElemArv

of T i p o P o s i c a o A r v : ( ° o s i c a o A r v : T P o s i c a o A r v ) ;TipoApSMOuArg:CAoSMOuArg: TApSMGuArg) ;TipoApClaus:CApClaus: TApClaus) ;end

F i s i c a m e n t e um nfi da S r v o r e de p r o v a ê" uma posição da

A r v P r o v a a p a r t i r da qual» através de funções Cvide "cu n ç õ e s

de A r v P r o v a " no Apêndice I I ) que são usadas como índices do a r r a y , são c a l c u l a d a s posições de e l e m e n t o s que contêm informações r e f e r e n t e s ao n3. Na f i g u r a 10 sSo mostradas como e q u a i s são e s t a s informações r e f e r e n t e s a um nõ determinístico a não determinístico.

(34)

2 7 -NG DETESMINÎSTI co PsiDaNo SMetaOoN 0 C I n s t D o C o n t e x C o cl Z n s t 0 CVar 1) C o n t e x l n s t N I n s tDoContex C o ci Z n s t T CVar 2) C o n t e x l n s t £

. •

X m 0 m D

N I n s t D o C o n t e x C o ci I n s t 0 CVar n) C o n t e x l n s t FIGURA 10 : _ E s t r u t u r a s do dêteririr,Istico3. NO N'SC DETEP^INISTIC?

'

P toPe t o r n o N o FroxClausNio E a s e L g E l i n N o P?i]c'Jo S^etrOoNie I n stDcCont ex C o d l n s t rj CVar 1 ) C o n t e x l n s t N I n s t DoC on t e x C o d l n s t ; CVar 2 ) C o n t e x I n s t X

*

Q

I n s t Oc Cent ex C o d l n s t 1 CVar n ) C o n t e x l n s t r, 5 s de t e r n: ir, Í s t i c o s e não

Cada nó cia S r v c r e de p r o v a c o r r e s o o n d e a uma instanciação de uma submeta cem uma c l S s u l a . Esta instanciação sera f a l h a Cs» c o n se qu 9 n t c- ne nt ? » o nó) se não f o r possível u n i f i c a r cadê a r j u n e n t o da submeta com o cor espenden te cia cabeça da clíusula, ou quando alguma submeta da cláusula f a l h a r .

Urra submeta f a l r a r S se n!c houver um ç^uoc de c l ? u s u l e s com o q u a l se possa i n s t a n c i a r a suometa Cc c?mpo "C-poCls" da e s t r u t u r a "TElemTabSimb" a o e n t a d a p o r "N'orne" ci a e s t r u t u r a ds p r e d i c a d o cie submeta f o r n u l o ) ou ss a instanciação f a l n a r e o nó f o r "determinístico".

(35)

Os nõs s3o arma: en sdos em ArvProva sequencialmente» em ordam de criação» a p a r t i r da posição da menor Índice do a r r a y . I s t o f a c i l i t a a eliminação de nós no retrocesso» j S que t o d o s os nõs a sarem e l i m i n a d o s astarão em posições p o s t e r i o r e s ao nC de r e t r o c e s s o . Assim» para e l i m i n a r e s t e s nõs, b a s t a a t r i b u i r ã variãvel " P o s i c a o L i v r e " Cque armazena a próxima posiçüo l i v r e para armazenamento de n 5 s ) o I n d i c a da posição o c j p a d a p a i o nó de retrocesso» tendo d e l e s i d o extraídas as informações A t a i s .

Retroceder» porém não s i g n i f i c a apenas e l i m i n a r nõs a p a r t i r do nó r e t r o c e s s o . 5 necessário também e l i m i n a r as intanciações r e s u l t a n t e s da criação d e s t a s nós mesmo que e s t a s instanciações tenham s i d o sobre «ariSveis am c o n t e x t o de o u t r o s n3s.

As posições das instanciações passíveis de serem eliminadas» sem que o n5 aonde estão o sejam» estão r e g i s t r a d a s numa p i l h a C o i l h a de ligações elimináveis) armazenada em ArvProva» com i n i c i o na posição mais e l a v a d a do a r r a y .

UNIVERSIDADE FEDERAL DA PARAlBA P r ó - K e i t o r i a P a r a A u i i n t n i d o Interior Coordenação Setorial de Pós-Graduação fl

£B£££S£fl BiSALUIIÍfl

Kua Aprígio Veloso. 882-Tel. (083) 321 -7222-H 355

58.100 - Campina Grande - Paraíba

O p r o c e s s o r e s o l u t i v o tem i n i c i o quando o programa p r i n c i p a l a t i v a o modulo "PesolvaClausMeta"» passando como parâmetro "C1ausHeta".

" C l a u s ^ e t a " 5 um a p o n t a d o r p a r a a e s t r u t u r a " T C l a u s " da c l a u s u l a Meta. Todas as o u t r a s e s t r u t u r a s necessárias ao p r o c e s s o r e s o l u t i v o são acessadas s e g u i n d o - s e a o o n t a d o r e s a p a r t i r desta e s t r u t u r a .

0 módulo "íesolvaClaus^eta" i n i c i a p e l 3 criação do N5 R a i z . Este é um nó determinístico com os campos "PaiOoNo" a "SubmetaCoNo" n u l o s . Contém porém o c o n t e x t o das variéveis que c o n s t i t u e m a c l a u s u l a meta. A p r i m e i r a suometa ( a mais ã e s q u e r d a ) da cléusula meta S tomada como submeta a t u a l .

(36)

29

-A submeta atual» aoesar de s e r sempre a submeta que se armazena eu " A r v P r o v a " como "SubmetaOoNo"» nem sempre e" a submeta de t r a b a l h o ( s u o m e t a sobre a q u a l se passará a t r a b a l h a r para e n c o n t a r uma instância). Sa a submeta a t u a l f o r uma " m e t a - v a r í S v e 1 , a submeta de t r a b a l n o será a submeta r e s u l t a n t e da desreferenciasão da submeta a t u a l . D e s r e f e r e n c i a r uma v a r i S v e l s i g n i f i c a b u s c a r um a p o n t a d o r p a r a termo a s s o c i a d o ( s e h o u v e r ) s s e g u i n d o o c o n t e x t o da instância. Mais d e t a l h e s sobre o p r o c e s s o da desreferenciaçSo serão v i s t o s p o s t e r i o r m e n t e .

A s e g u i r t e n t a - s e r e s o l v e r a cláusula meta. I s t o i m p l i c a em b u s c a r i t e r a t i v a m e n t e uma submeta ( a t u a l ) vazia» s i g n i f i c a n d o a inexistência de submetas a r e s o l v e r . Se todas as p o s s i b i l i d a d e s de instanciação e r e t r o c e s s o de uma submeta forem e s g o t a d a s c o n c l u i - s e que não 5 possível e n c o n t r a r uma solução.

0 código do programa ê dado a b a i x o :

; p r o c e d u r e 3 e s o I v a C l a u s M e t a ( v a r ClausMeta : TAoClaus) ;var A r v P r o v a : a r r a y ;P o s i c a o L i v r e j T o p o P i l h a L i g s E l i m »Conte xSMAtual »ContexS^Trab »ContexClsSendoTent .PaiSMAtual

»NoRet roce sso

JClausSentíoTentada j P r o x C l a u s A T e n t a r ;SMAtual , SMDeTrab ; U n i f P o s s i v e l (.0..ComprArvProva.) o f TElemArv : TDo s i c a o A r v : TApClaus : T ApSM 3u Ar g : b o o l e a n ; b e g i n P a i S M A t u a l := 0 ;SMAtual := n i l JPosícaoLivre := 1 ; T o p o P i l h a L i g s E l i m := ComprArvProva ;CIausSendoTentada := ClausMeta iProxCla us AT e n t a r := n i l ;CriaNoDeterm /* C r i e No Raiz» r e t o r n a n d o * em °aiSMAtual */ ;SMAtual := ClausMeta -> . P r i m S ^ e t a ;ContexSMAtual := ContexOoNo(Pai SMAtua1) ;NoRatro cesso := 0 ; U n i f P o s s i v e l := t r u e ; * h i l e ( S M A t u a l O n i l ) and U n i f P o s s i v e l do b e g i n AcneSMOeTrab V3usqInstancNoGpo ; 3usqSMNaoInstanc

(37)

; end

999: /* Ponto se Recuperação de E r r o s : Sempre que * f o r d e t e c t a d o um e r r o d u r a n t e a resolução * de uma c l a u s u l a meta» o processamento sera * d e s v i a d o para este p o n t o .

*•

; E l i m i n e C l a u s CClausMeta) ; e nd

Este mSdulo acha a submeta de t r a b a l h o . a suometa de

t r a b a l h o I a prõpia submeta a t u a l quando e s t a não 5 uma meta-variâvel. Caso contrário I a submeta do p r o c e s s o de d e s r e f e r e n c i a c S o da submeta a t u a l .

3 código d e s t e módulo ? dado a b a i x o :

I p r o c e d u r e AcheSMDeTrab ; b e g i n SMDeTrab := SMAtual ;ContexSMTrab := ContexSMAtual j O e s r a f e r s n c i e CSMOeTrab» ContexSMTrab) ;cas« S^DeTrao -> . T i p o of Nlnt» NReai: b e g i n u i r i t e l n ; u i r i t e l n (

'ERRO NA RESOLJCAC DE CLAUSULA META: Submeta nao pode ser um numero" ) ;goto 999

/# Desvio para o p o n t o de recuperação de e r r o s * na r o t i n a Reso1vaClausMeta

*/

; end

; V a r i a v e i : b e g i n u i r i t e l n ; i u r i t e l n (

*ERR3 NA RESOLUÇÃO DA CLAUSULA META: Meta—Variável nao i n s t a n c i a d a f o i o b t i d a na c l a u s u l a meta ou em alguma c l a u s u l a u t i l i z a d a na r e s u l u c a o da mesma.

; g o t o 999

Desvio para o p o n t o de recuperação de e r r o s * na r e t i n a R e s o l v a C l a u s M e t a

*/

;end ;Pre dOuFunc:

(38)

31

-: end

Este m5dulo busca urna instância p a r a a submeta de t r a b a l h o , d e n t r e as c l a u s u l a s cio çruoo de c l a O s u l a s da sub me ta . 0 código d e s t e módulo 5 m o s t r a d o a b a i x o : ; p r o c e d u r e 3usqInstancNoGpo Jvar GpoAtual ; p r o c e d u r e T e n t e ' r o x C l a u s

;beçin i f SMDeTrab - > . AoPredOuFunc ->. ^ome - > . GpoCls

->. T i o opr e d C a b e c O PredOef

t h e n T en t e C l au sE miout e l s e TenteC1ausDef ; end

; b e g i n GpoAtual := SMDeTrab -> .ApPredCucunc -> .Nome ->.

GpoCls J i f 3 p o A t u a l = n i l then U n i f P o s s i v e l := f a l s e else b e g i n P r o x C l a u s A T e n t a r := G o o A t u a l ->. P r i m C l a u s :T e n t e P r o x C l a u s ; end

; m h i l e Cnot U n i f P o s s i v e l ) and ( N o P e t r o e esso O 0 ) do b e g i n R e t r o c e d a

; T e n t e P r o x C l a u s ; end

; end

Deve-se n o t a r que a suometa a t u a l e, c o n s e q u e n t e m e n t e a de t r a b a l h o , pode ser m o d i f i c a d a no r e t r o c e s s o . Porém, conforme veremos no I t e m 6.4.2-5» o módulo r e t r o c e d a também a t u a l i z a e s t a s variéveis. 0 módulo Ten t e C l au sD ef é d e t a l h a d o no I t e m 6.4.2.6.

(39)

£ titula 2 y s s i ü 3 £ 2 l n s i a M

Este m5dulo p e s q u i s a a árvore de prova» ?, p a r t i r do n5 a t u a l , em b j s c a de uma submeta nSo i n s t a n c i a d a .

0 código d e s t e módulo 5 dado a b a i x o :

; p r o c ? d u r e BusqSMNaoInstanc

; b * g i n luhileCSMAtual = n i l ) and ( P a i S M A t u a l O 1 ) do o e g i n SMAtual := ArvProva CSMetaDoNo C

P a i S M A t u a l ) D . ApSMjuArg - > . ProxSMDuArg ;PaiSMAtual := A r v " r o v 3 CPaiOo^o ( P a i S M A t u a l ) 1 . P o s i c a o A r v ;ContexS«Atual := ContexDoNo C P a i S M A t u a l ) ; end ; end

Neste módulo, o f a t o da submeta a t u a l s e r v a z i a CSMAtual = n i l ) i n d i c a que o nó p a i não p o s s u i mais nenhuma submeta a i n s t a n c i a r . Ocorrendo isto» a submeta a t u a l I a t u a l i z a d a p a r a c o r r e s p o n d e r a próxima submeta do p a i do nó p a i . Se e s t a submeta a i n d a f o r vazia» todo o p r o c e s s o se r e p e t e até" que s e j a e n c o n t r a d a uma submeta não v a z i a ou o n5 p a i s e j a o nó r a i z ( P a i S M A t u a l = 1 ) .

U N I V E R S I D A D E F E D E R A L D A P A R A Í B A P r 6 - K e i t o r i a P a r a A s s u n t o » d o Interior Coordenação Setoriol de Pós-Graduação Hua Aprígio Veloso. 882 - Tel (083) 321-7222-1( 355

(40)

33

-Neste nódulo ? f e i t o o r e t r o c e s s o para o n5 r e t r o c e s s o . Tocos os nós e i n s t a n c i a s s e s f e i t a s a p 5 s o n5 r e t r o c e s s o , i n c l u s i v e , s*o e l i m i n a d o s .

0 código d e s t e módulo '- dado a b a i x o :

; p r o c e d u r e - e t r o d a d a

; p r o c e d u r e E l i m i n e L i g s F a l h a s CNo : T P o s i c a o A r v ) ; v a r E a s e E l i n

• I n s t A A n u l a r : T P o s i c a o A r v

;beçin BaseElim := A r v P r o v a CBaseLgElimNoCNo)j".PosicaoArv ; u i h i l e T o p o P i l h a L i g s E l i m < BaseElim

do b e g i n T o p o P i l h a L i g s E l i m := T o p o P i l h a L i g s E l i m + l ; l n s t A A n u l a r := ArvProva C

T o p o P i l h a L i g scl i m 1

. 0o s i ca o A r v

;ArvProva CCodlnst C I i s t A Anui a r ) j * .Ap SM 9u Ar g := n i l ;ArvProva C C o n t e x I n s t C I n s t A A n u l a r ) 1

. ' o s i c a o A r v := 0 ; end

; end

; b e g i n SMAtual : = ArvProva CSMetaOoNo (No R e t r o c e s s o ) 3 . ApSMOuArg ;PaiSMAtual := ArvProva CPaiOoNo C N o R e t r o c e s s o ) 3 .

P os i c ao Ar v ;ContexSMAtual := A r v P r o v a CContexDoNo C NoRe t r oc es so ) 1 .°o s i caoA r v ; AcheSMOeTrab ; P r o x C l a u s A T e n t a r := ArvProva CProxClausNo C N o R e t r o c e s s o ) ! .ApClau s ; E l i m i n e L i g s F a l h a s ( N o R e t r o c e s s o ) ; P o s i c a o L i v r e := P o s i c a o L i b R e t r o c CNo R e t r o c e s s o ) ;NoRetorno := A r v P r o v a CPtoRetornoNo C MoRetoce3so)l.°osicaoArv ; e nd

(41)

Este m5dulo t e n t a i n s t a n c i a r a submeta de t r a b a l h o con a próxina cláusula ( d e f i n i d a ) a t e n t a r . Se esta cláusula f o r a flltima do grupo» 5 c r i a d o um n5 determinístico» caso contrário, n3o determinístico» p a r a t e n t a r a unificação. Se f o r possível u n i f i c a r a s u b n e t a a t u a l passa a s e r a p r i m e i r a submeta da cláusula sendo t e n t a d a .

0 código d e s t e módulo I dado aoaixoí

; p r o c e d u r e T e n t e C l a u s D e f ; b e g i n i f P r o x C l a u s A T e n t a r = n i l t n e n U n i fao s s i v e l := ca l s e e l s e b e g i n ClausSandoTentada := ' r o x C l a u s A T e n t a r : P r o x C l a u s A T e n t a r := ProxC1ausATentar - > . P r o x C l a u s ; i f P r o x C l a u s A T e n t a r = n i l t h e n CrieNoOeterm e l s e CrieNoNaoüeterm ; i f ' o s i c a o L i v r e >= Topo°ilhaLigsElim t h e n b e g i n w r i t e l n .uiritelní "ERRO NA RESOLUÇÃO OE CLAUS META : A área de

memoria r e s e r v a d a p a r a a a r v o r e de orova e s g o t o u " ) . g o t o 999 /* Desvio p a r a o p o n t o de recuperação de e r r o s * na r o t i n a ResolvaClaus«eta */ ; end ;ContexClsSendoTent := ContexDoNo ( P a i S M A t u a l ) .TenteUnifSMComCls ; i f U n i f P o s s i v e l t h e n b e g i n SMAtual t = ClausSandoTentada ->. 3r i m S M e t a ;ContexSMAtual := ContexClsSendoTent ; end ;end ; en d

(42)

35

-3 nó r a i z da S r v o r a de p r o v a ê c r i a d o quando o módulo R es o i va Cl au sM et a a t i v a Cr ieNo3e terrn com SMAtual * n i l e PaiSMAtual = 0. Tocios os o u t r o s nós» seus descendentes» s?o c r i a d o s quando T e n t e C l a u s D e f ou algum dos módulos d? T e n t e C l ausE mlout ativa» conforma o caso, C r i a N o D e t e r m ou CrieNoNaoDeterm.

3s códigos de C r i e ^ o O e t e r m e CrieNoNaoCeterm são dados a b a i x o : ; p r o c a d u r e CrieNoOeterm ;var NoEmCriacao : T P o s i c a o A r v ; b e g i n NoEmCriacao := NovoNoOeterm C P o s i c a o L i v r e ) ;CompleteCriacaoNo (NoEmCriacao) ;PaiSMAtual := NoEmCriacao ; end ; p r o c a d u r e C r i e MoNa o C et arm ívar NoEnCriacao : T P o s i c a o A r v ; b e g i n NoEmCriacao := NovoNoNaoOaterm ( P o s i c a o L i v r e ) ;ArvProva CP t o R e t o r n o ( N o E m C r i a c a o ) ] . P o s i c a o A r v := NoRetrocesso J A r v P r a v a CProxClausNo(NomeC r i ac ao ) 3 •AoClaus := °roxClausATentar ; A r vpr o v a CEasaLgElimNo(NoEmCriacao)] . P o s i c a o A r v := T o p o P i l n a L i g s E l i m ;ComplataCriacaoNo (NoEmCriacao) ;PaiSMAtual := NoEmCriacao ;NoRatrocesso := NoEmCriacao ; end

Estes d o i s módulos a t i v a m Compl9teCriacaoMo que l i d a com os campos comuns a e s t e s d o i s t i p o s de nós, e c u j o o código § dado a o a i x o :

(43)

; p r o c e d u r e CompIeteCriacaoNo (vôr NoEmCriacao : T P o s i c a o A r v ) ;var I n d V a r : T I n d V a r ílnstanc : T°osicaoArv ; b e g i n A r v3r o v a CPaiDoNo(NoEmCriacao) j" . P o s i c a o A r v := P a i S M A t u a l ;ArvProva CSMetaDoMoCNoEmCriacao)3 .AoSMOuArg := SMAtual ílnstanc := I n st 9oCo nt ex ( C on te xC oN o( No Em Cr i a c c ) , 1 ) ; f o r I n d V a r := 1 t o ClausSendoTentada ->. NVars do b e g i n A r vpr o v a CCodIn s t C I n s t a n c ) 1 .ApS^CuArg := n i l { A r v P r o v a C C o n t e x I n s t C I n s t a n c ) ] . P o s i c a o A r v : = 3 ; i n s t a n c := ' r o x l n s t C I n s t a n c ) ;end ; P o s i c a o L i v r e := PosicaoSegAoNoCNoEmCriacao, C1 ausSendoTentada ->. NVars) ; end

Note que em t o d a s as i n s t a n c i a s dc c o n t e x t o os campos C o d l n s t 3 C o n t e x l n s t sãc i n i c i a 1 i z a d o s com " n i l " e zero r e s p e c t i v a m e n t e , p o i s a instanciação se darS eu e t a p a s p o s t e r i o r e s .

fi-i-^. 2

£ r f i £ £ í i 2

d£ UaiíigaiSa

1 lDSÍanc.iã£ão.

0 p r o c e s s o de unificação e instanciação 5 i n i c i a d o com a ativação do módulo TenteUnifSMComCls. A p a r t e do g r a f i c o e s t r u t u r a d o c o r r e s p o n d e n t e a e s t e p r o c e s s o é" dado a b a i x o :

U N I V E R S I D A D E F E D E R A L DA P A R A Í B A P i ó - K e i t o r i a P a r a A s s u n t o , d o Interior Coordenação Setorinl de Cós-Graduação Hua Aprígio Veloso. 882 Te] (083) 321-7222-R 355

(44)

37

-/ *

* P r o c e d u r e qt? t e n t a u n i f i c a r submeta com c l a u s u l a . =?/

îprocedure TanteUn i f SM ComC 1 s /*

s Procédure en que, dados os argumentos de d o i s p r e d i c * t e n t a u n i f i c a r os a r g u m e n t o s c o r r e s p o n d e n t e s .

* /

;procec'ure T e n t eUni f A r g s C P r i m A r g l : TApSMGuArg ; C o n t e x l : T ^ o s i c a o A r v ;Prirr,Ar52 : T£pSM?u»rg ;Contex2 : T F o s i c a o ^ r v ) ; f or nard

/ *

tf - r o c e o j r s t t n t a u n i f i c a r f u n c a o corn f u n c a c .

* /

; procédure TenteUnifF<jncComcunc (=u n c l , F j n c 2 :

(45)

; v a r C o n t e x l , Contex2 : TPos i c ao Ar v )

; b e g i n i f F u n d - > . Nome O Func2 - > . Nome t h e n U n i f P o s s i v e l : = f a l s e e l s e i f ( F u n c l - > . P r i n A r g = n i l ) and (Func2 - > . P r i n A r g = n i l ) t h e n U n i f P o s s i v a l '= t r u e e l s e T e n t a U n i f A r g s ( F u n c l - > . P r i m A r g , C o n t e x l ,Func2 - > . P r i n A r g »Contex2 ) ; en d / * * Definição da p r o c e d u r e T e n t e U n i f A r g s , ( d e f i n i d a * a n t e r i o r m e n t e com f o r w a r d ) . £ / W / ; p r o c a d u r e T e n t e U n i f A r g s ,'var A r g l , Arg2 : TApSMOuArg /*

* Procedure que t e n t a u n i f i c a r d o i s a r g u n e n t o s .

=?/

p r o c e d u r e Tenteünif Ar3ComArg ( A r g l , Arg2 : TAoS^GuArç ; C o n t e x l , Contex2 : T P o s i c a o A r v ) ;var T i p o C a l c l , T i p o C a l c 2 : T A r i t n e t ; r n t C a l c l , I n t C a l c 2 : i n t e g e r ; P e a l C a l c l , R a a l C a l c 2 : r e a l / *

£ P r o c e d u r e que i n s t a n c i a una variável ou s e j a , c r i a * una ligação e n t r e a variável e seu t e r n o a s s o c i a d o . */ ;proceciure I n s t a n c i e ( v a r V a r i a v : TApSMOuArg ;var ContexVar : T9o s i c a o A r v ; TarmoAssoe : TApSMOuArg ;ContexTAssoe : T P o s i c a o A r v ) ;var índice : T i n d V a r ; l n s t a n c : T P o s i c a o A r v ; b e g i n índice := V a r i a v - > . I n d D a V a r i a v e l

; i f índice <> 0 /* Se nao f o r variável anônima */ t h e n b e g i n I n s t a n c := I n s t a n c G 0 C 0 n t » x ( C o n t e x V a r , índice) ;ArvProva C C o d l n s t ( I n s t a n c ) ? . ApSMQuArg ;ArvProva CContex I n s t ( I n s t a n c ) 1 . P o s i c a o A r v := ContexT I s s o : ; i f I n s t a n c < N o R e t r o c e s s o

(46)

3 9 -then /* A posição d e s t a i n s t a n c i a * p r e c i s a ser guardada na * p i l h a de l i c a g a o a * e l i m i n a r */ o e g i n ArvProva C T o 3 0Di l h a L i g s E l i m 3 . Posic aoArv : = I n s t a n c ; T o p o P i l h a L i g s E l i m : = T o p o P i l h a L i g s E l i m - 1 ; i f T o o o P i l h a L i g s E l i m < = P o s i c a o L i v r e t h e n b e g i n u / r i t e l n ; * r i t e l n (

' E r r o na resolução de Claus Meta a area da memoria' r e s e r v a d a para a a r v o r e de p r o v a e s g o t o u ' ) ;goto 999 /* D e s v i o para o p o n t o de recuperação de e r r o s * na r o t i n a R e s o l v a C l a u s M e t a */ ; end ; end ; end ; U n i f P o s s i v e l := t r u e ; end / *

* P r o c e d u r e que i n s t a n c i a uma variável com o u t r a * variável nao i n a t a n c i a d a . */ { p r o c e d u r e I n s t a n c V a r C o n V a r C v a r Variavl» V a r i a v 2 : TApS^OuArg ;var C o n t e x l , ContexZ : T P o s i c a o A r v ) ; b e g i n i f C V a r i a v l ->. I n d D a V a r i a v e l O 0 ) and ( V a r i a v 2 ->. I n d D a V a r i a v e l O 0) /* Sa uma das variáveis f o r anónima,

# nao e' necessário i n s t a n c i a r . */ t h e n i f C o n t e x l < c o n t e x 2 t n e n I n s t a n c i e C V a r i a v 2 , Contex2 , V a r i a v l , C o n t e x l ) e l s e i f C o n t e x l > Contex2 t h e n I n s t a n c i e C V a r i a v l , C o n t e x l , V a r i a v 2 , C o n t e x t e l s e i f V a r i a v l O V a r i a v 2 t h e n I n s t a n c i e ( V a r i a v 1 ,Cont e x l , V a r i a v 2 » Co n t ex 2) ; U n i f P o s s i v e l := t r u e ; end

(47)

/ *

* TentaUnifArçConArç - Corpo da p r o c e d u r e */ J b e g i n Disrafaranciã(Argl, C o n t e x l ) ; D i s r e f a r eneie(Arg2» C o n t e x 2 ) I c a s e A r g l ->. Tipo o f N I n t : case Arç2 ->. T i p o o f N I n t : U n i f P o s s i v e l : = ( A r g l ->. V a l o r l n t a i r o • Arg2 - > . V a l o r l n t e i r o ) .Variável ' I n s t a n c i a i Arg2, Contex2

, A r g l , C o n t e x l ) ;N?eal : U n i f P o s s i v e l := f a l s e

;PredOuFunc:

i f T i p o D e - u n c ( A r g 2 ->. ApPradOuFunc) = FuncCalc

t h e n o e g i n CalcVa l o r Arg( Arg2 , Contex2 , T i o o C a l c 2 , I n t C a l c 2 , R e a l C a i c 2 ) ; i f T i p o C a l c 2 = NCInt t h e n J n i f P o s s i v e l : = C A r g l - > . V a l o r l n t a i r o = I n t C a l c 2 ) e l s e U n i f P o s s i v e l := f a l s e ; end e l s a U n i f P o s s i v e l := f a l s e ; end

;NReal : case Arg2 ->. t i o o

of NRoal : U n i f P o s s i v e l := ( A r g l ->. V a l o r R e a l • A r g l ->. V a l o r R e a l ) ;variável : Instancíe(Arç2, Contex2

• A r g l , C o n t e x l ) ; N I n t : U n i f P o s s i v e l := f a l s e ;PredOuFunc : i f T i p o 0 e F u n c ( A r g 2 ->. ApPretíOu^unc) = FuncCalc t h e n oegin C a l e V a l o r A r g ( A r g 2 , Contex2 , T i p o C a l c 2 , I n t C a l c 2 , R e a l C a l c 2 ) i f T i p o C a l c 2 =NReal t h e n Unif°ossivel := ( A r g l ->. V a l o r R e a l = R a a l C a l c 2 ) e l s e U n i f P o s s i v e l := f a l s e ; end e l s e U n i f P o s s i v e l f a l s e ; end ; v " a r i a v e l : case Arç2 ->. T i p o o f N I n t , NReal, PredOuFunc : I n s t a n c i e i A r g l , C o n t e x l »Arg2, C o n t e x 2 )

Referências

Documentos relacionados

Falamos so- bre os métodos dos elipsóides, embora este método seja muito ineficiente na resolução prática de problemas de prograrnaç-ã.o linear, ele tem um val()r

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

(Parábola do semeador). André Luiz; “Faça o mesmo” mens. 23, In: Sementeira de Fraternidade, Divaldo P. Joanna de Angelis; “Observa teu comportamento” mens. 30, In:

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Desta forma, a qualidade higiênico-sanitária das tábuas de manipulação dos Laboratórios de Técnica Dietética, Tecnologia de Alimentos e Gastronomia e das

Note on the occurrence of the crebeater seal, Lobodon carcinophagus (Hombron &amp; Jacquinot, 1842) (Mammalia: Pinnipedia), in Rio de Janeiro State, Brazil.. On May 12, 2003,

Deve conhecer perfeitamente este Manual de Procedimentos ou “Bússola”, e o papel de cada ministério da Equipe de Serviço; assim como o Esquema do Curso

Desta maneira, observando a figura 2A e 2C para os genótipos 6 e 8, nota-se que os valores de captura da energia luminosa (TRo/RC) são maiores que o de absorção (ABS/RC) e