Cтраница 1
Оператор отсечения следует применять с осторожностью. [1]
Оператор отсечения дополняет стандартную стратегию средством для удаления нежелательных вычислений, и отчасти поэтому интерпретаторы не могут в полной мере использовать полноту резолюции. Другая причина заключается в том, что в соответствии с принципом поиска сначала в глубину исполнение программы может войти в бесконечное вычисление и никогда из него не выбраться, оставляя поэтому часть дерева поиска непросмотренной. В некоторых реализациях имеются средства контроля зацикливания, которые пытаются распознать бесконечные вычисления, тогда как в более грубых системах может просто накладываться некоторое произвольное ограничение на допустимую длину вычислений. [2]
Применяя в реальном ПРОЛОГе оператор отсечения, мы коренным образом изменяем эти свойства. [3]
Часто утверждают, что оператор отсечения является необходимым для практического логического программирования. Несомненно полезный, он тем не менее поощряет ленивый стиль программирования: вместо того чтобы тщательно продумывать способ описания отношения, которое действительно требуется, может возникнуть соблазн дать по возможности самое простое описание какого-нибудь более широкого отношения и затем разбросать по тексту программы операторы отсечения, избавляясь тем самым от нежелательных кортежей. Такое недисциплинированное употребление оператора отсечения может затруднить анализ и понимание программ. [4]
Наиболее известной директивой управления является так называемый оператор отсечения ( cut operator), представляющий собой просто символ /, который пишется в программе на правах еще одного вызова. При его активации сразу же отсекаются все неисследованные пути, выходящие из всех точек ветвления, которые встретились с момента входа в ту процедуру, чей вызов привел к появлению этого оператора в целевом утверждении. [5]
Интересно посмотреть на то, как при помощи оператора отсечения, мы можем избавить ПРОЛОГ-программы от зацикливания, возникающего при бесконечно долгом выполнении операций вследствие использования неправильно описанных данных. [6]
Заметим, что в приведенной реализации предиката expand and close используется оператор отсечения языка Пролог, который предотвращает генерацию ненужных расширений. [7]
Управление С будет исчерпывающим, если оно совпадает со стандартной стратегией, в которой не используются операторы отсечения и другие подобные директивы. [8]
Программист может до произвольных пределов устранять бесполезные или какие-то иные нежелательные попытки выполнения унификации путем использования оператора отсечения ( /), для реализации которого обычно требуется лишь простое обновление регистра БТВ и, быть может, нескольких ячеек ПТВ. Как правило, на операцию отсечения тратится гораздо меньше времени, чем экономится посредством устранения лишних неиспробованных кандидатов. Это справедливо, разумеется, при условии, что оператор отсечения используется в соответствии со здравым смыслом; при злоупотреблении им может произойти обратное. [9]
Такое может произойти, когда управление С способно удалять вычисления в ходе исполнения программы, реагируя, например, на оператор отсечения или на директивы вычеркивания процедур. G) возможности полностью не исследуются. [10]
Вслед за каждым из приведенных выше целевых утверждений вызывается первая процедура вывести, в результате чего последнее из полученных приближений подвергается проверке на точность; если оно не удовлетворяет требуемой точности, то вызывается другая процедура вывести, действие которой состоит в выполнении однократного умножения матрицы М на вектор и получении, таким образом, следующего приближения. Отметим, что в целевом утверждении используется оператор отсечения: он служит для того, чтобы прекратить исполнение программы, как только будет вычислено первое достаточно точное решение, предотвращая тем самым дальнейшие ненужные уточнения. [11]
Во втором подходе мы обходимся без процедур не-входит, интерпретируя неудачу при решении вызова входит ( и, х) как сигнал к выполнению вставки. Кроме того, в этом подходе требуется использовать оператор отсечения. [12]
Каждый из них обнаружит в ней свой источник неэффективности, и мы устраним оба этих источника по очереди, применив оператор отсечения. [13]
Во многих реализациях управляющая компонента в значительной степени фиксируется в интерпретаторе. Программист может оказывать влияние на управление исполнением своей программы путем выбора текстуального упорядочения вызовов и процедур, а также путем применения ряда специальных средств, таких как оператор отсечения, но общий принцип поиска сверху вниз и в глубину имеет, как правило, первостепенную важность. [14]
Часто утверждают, что оператор отсечения является необходимым для практического логического программирования. Несомненно полезный, он тем не менее поощряет ленивый стиль программирования: вместо того чтобы тщательно продумывать способ описания отношения, которое действительно требуется, может возникнуть соблазн дать по возможности самое простое описание какого-нибудь более широкого отношения и затем разбросать по тексту программы операторы отсечения, избавляясь тем самым от нежелательных кортежей. Такое недисциплинированное употребление оператора отсечения может затруднить анализ и понимание программ. [15]