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 //