O corte

Introduzimos um novo átomo, denotado por !, e chamado corte (ou corta-escolhas). O corte não tem significado lógico, mas apenas um significado operacional determinístico, ligado ao percurso standard da árvore de procura. Para o definir, é cómodo usar a terminologia procedimental. O corte é um procedimento pré-definido, quer dizer, apenas poderá figurar no corpo de uma cláusula, ou numa questão (alvo). A chamada ao procedimento ! tem imediatamente êxito, como se o corte fosse definido pela única cláusula (facto)

         !.

Mas o que é essencial é ``o efeito lateral'' que acompanha o êxito dessa chamada e que modifica a árvore de procura corrente (modifica o percurso-construção). Para descrever esse efeito lateral consideremos um nó N2 da árvore de procura onde o corte é o átomo escolhido. Seja N1 o nó pai do nó onde esse corte aparece: o átomo escolhido em N1 é unificado com a cabeça da cláusula cujo corpo contém esse corte. O efeito do corte é o de suprimir todas as escolhas em espera depois do nó N1 (incluído): corta os ramos da árvore de procura ainda não percorridos e situados à direita da descida de N1 a N2. Estes ramos sendo suprimidos, não serão portanto percorridos por ocasião dos retrocessos. Vejamos alguns exemplos que ilustram o mecanismo. Para isso consideremos o seguinte programa:

         q(a).
         q(b).
         q(c).

         r(b,b1).
         r(c,c1).
         r(a,a1).
         r(a,a2).
         r(a,a3).

         p(X,Y) :- q(X), r(X,Y).
         p(d,d1).

         p1(X,Y) :- q(X), r(X,Y), !.

         p2(X,Y) :- q(X), !, r(X,Y).

         p3(X,Y) :- !, q(X), r(X,Y).
         p3(d,d1).

e as questões:

         ?- p(X,Y).
         ?- p1(X,Y).
         ?- p2(X,Y).
         ?- p3(X,Y).

Eis as quatro árvores de procura (simplificadas). Os ramos cortados são marcados com //












(c) Delfim F. Marado Torres
1999-04-13