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

Детерминизм и отсечение.

Если бы предикат friend, определенный в предыдущей программе, не со-

держал отсечений, то это был бы недетерминированный предикат (предикат,

способный произвести множественные решения при помощи поиска с возвра-

том). Во многих реализациях Пролога программисты должны быть особенно

внимательными с недетерминированными предложениями из-за сопутствующих им

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

Однако Турбо Пролог выполняет проверку на недетерминированные предложе-

ния, облегчая ваше бремя программиста.

Тем не менее, в целях отладки (а также в других целях), может ока-

заться необходимым ваше вмешательство; для этого существует директива

компилятора check_determ. Если вставить эту директиву в самое начало

программы, то Турбо Пролог будет выдавать предупреждение в случае обнару-

жения недетерминированных предложений в процессе компиляции. Нажатие фун-

кциональной клавиши F10 вызывает игнорирование этого предупреждения, в то

время как нажатие любой другой клавиши приводит к прекращению компиляции.

Вы можете превратить недетерминированные предложения в детерминиро-

ванные, вставляя отсечения в тело правил, определяющих данный предикат.

Например, помещение отсечений в предложения, определяющие предикат

friend, делает этот предикат детерминированным, поскольку с этими отсече-

ниями обращение к friend может возвратить одно и только одно решение.