Вырезать (логическое программирование)


Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Покрой , в Прологе , является целью , написанном , как!, Всегда преуспевает, но не может быть отошел. Его лучше всего использовать для предотвращения нежелательного поиска с возвратом , включая поиск дополнительных решений с помощью Prolog, и во избежание ненужных вычислений.

Разрез следует использовать экономно. В то время как сокращения могут быть вставлены в коды, содержащие ошибки, если в тесте нет необходимости, потому что сокращение гарантировало его истинность, рекомендуется указать это в комментарии в соответствующем месте. [1]

Некоторые программисты называют сокращение спорным средством управления [2], потому что оно было добавлено только по соображениям эффективности и не является предложением Хорна .

Типы

Зеленый срез

Использование стрижки, которая только повышает эффективность, называется зеленой стрижкой. Зеленые сокращения используются для повышения эффективности программ без изменения вывода программы. Например:

 игра ( X )  : -  gotmoney ( X ),!.  игра ( X )  : -  gotcredit ( X ),  \ +  gotmoney ( X ).

Это называется оператором зеленого сокращения . ! говорит переводчику, чтобы он прекратил искать альтернативы; однако в случае gotmoney(X)неудачи он проверит второе правило. Хотя проверка gotmoney(X)во втором правиле может показаться излишней, поскольку внешний вид Пролога зависит от gotmoney(X)предыдущей неудачи, в противном случае второе правило не будет оцениваться в первую очередь. Добавление \+ gotmoney(X)гарантирует, что второе правило будет работать всегда, даже если первое правило было случайно удалено, изменено или перемещено после второго.

Красный разрез

Разрез , который не является зеленый разрез называется как красный разрез , например:

 игра ( X )  : -  gotmoney ( X ),!.  игра ( X )  : -  gotcredit ( X ).

Правильное размещение оператора сокращения и порядок правил необходимы для определения их логического значения. Если по какой-либо причине первое правило будет удалено (например, в результате случайного копирования и вставки ) или перемещено после второго, второе правило будет нарушено, т. Е. Оно не будет гарантировать выполнение правила \+ gotmoney(X).

использованная литература