Эта статья поднимает множество проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалить эти сообщения-шаблоны )
|
Покрой , в Прологе , является целью , написанном , как!, Всегда преуспевает, но не может быть отошел. Его лучше всего использовать для предотвращения нежелательного поиска с возвратом , включая поиск дополнительных решений с помощью 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)
.