logo search
TurboProlog / Документация / TOM_1

Динамическое отсечение

В Прологе традиционно применяется статическое отсечение. Одной из

проблем, связанных с отсечением, является то, что отсечение воздействует

на предикаты, расположенные за символом !, и только в тех предложениях,

куда этот символ был помещен (в исходном тексте программы). При этом от-

сутствует возможность передачи отсечения в качестве аргумента в другой

предикат, в котором отсечение будет выполняться при наличии определенных

условий. Другой проблемой, связанной с традиционным отсечением является

невозможность отсечь поиск дальнейших решений подцели в предложении, не

отсекая при этом точки слежения с возвратом для последующих предложений

данного предиката.

В версии 2.0 Турбо Пролога введен механизм динамического отсечения,

который реализован при помощи двух стандартных предикатов getbacktrack и

cutbacktrack. Этот механизм позволяет решить обе указанные выше проблемы.

Предикат getbacktrack устанавливает текущий указатель в вершину стека то-

чек слежения с возвратом. В дальнейшем вы можете удалить все полученные

таким образом точки слежения с возвратом с помощью предиката

cutbacktrack.