Cut (логическое программирование)
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
разрез — В Прологе это цель , записанная как !
, который всегда завершается успешно, но не может быть возвращен. Сокращения могут предотвратить нежелательный возврат , который может добавить к запросу нежелательные решения и/или дополнительные затраты пространства/времени.
Отрез следует использовать экономно. Хотя в код, содержащий ошибки, можно вставлять вырезки, но если в тесте нет необходимости, поскольку вырезка гарантировала, что это правда, рекомендуется сказать об этом в комментарии в соответствующем месте. [1]
Некоторые программисты называют вырез спорным средством управления. [2] потому что оно было добавлено только из соображений эффективности и не является логической формулой .
Типы
[ редактировать ]Зеленый срез
[ редактировать ]Использование сокращения, которое только повышает эффективность, называется «зеленым сокращением». Зеленые сокращения используются для повышения эффективности программ без изменения результатов программы. Например:
gamble(X) :- gotmoney(X),!.
gamble(X) :- gotcredit(X), \+ gotmoney(X).
Это называется зеленого оператор разреза . ! говорит переводчику прекратить поиск альтернатив; однако, если gotmoney(X)
в случае неудачи он проверит второе правило. Хотя проверка на gotmoney(X)
во втором правиле может показаться излишним, поскольку внешний вид Пролога зависит от gotmoney(X)
раньше это не сработало, иначе второе правило не будет оцениваться в первую очередь. Добавление \+ gotmoney(X)
гарантирует, что второе правило всегда будет работать, даже если первое правило будет случайно удалено, изменено или перемещено после второго.
Красный разрез
[ редактировать ]Отрезок, не являющийся зеленым отрубом, называется красный разрез , например:
gamble(X) :- gotmoney(X),!.
gamble(X) :- gotcredit(X).
Правильное размещение оператора обрезки и порядок правил необходимы для определения их логического смысла. Если по какой-либо причине первое правило будет удалено (например, из-за случайного вырезания и вставки ) или перемещено после второго, второе правило будет нарушено, т. е. оно не будет гарантировать выполнение правила. \+ gotmoney(X)
.
Вредный порез
[ редактировать ]Урезание, которое влияет на корректность программы, является вредным сокращением. Например:
min(X,Y,X) :- !, X =< Y. % the ! Is harmful because if Y<X
min(X,Y,Y) :- Y < X. % it will not let to continue to the second rule and will fail
Ссылки
[ редактировать ]- ^ Дайкхофф, Рой (20 мая 1994 г.). Расширения логического программирования: 4-й международный семинар, ELP '93, Сент-Эндрюс, Великобритания, 29 марта - 1 апреля 1993 г. Труды . Springer Science & Business Media. ISBN 978-3-540-58025-6 .
- ^ Основы логического программирования , Springer (2012).