Явный сбой. fail
часто используется в сочетании с разрезом: ... !, fail.
для обеспечения отказа.
Для всех конструкций. Явное использование fail
/ false
для перечисления через backtracking - очень склонная к ошибкам активность. Рассмотрим случай:
... ( generator(X), action(X), fail ; true ), ...
Идея, таким образом, должна «делать» действие для всех X
. Но что происходит, если action(X)
терпит неудачу? Эта конструкция просто продолжается со следующим кандидатом - mdash; как будто ничего не произошло. Таким образом, некоторые ошибки могут оставаться необнаруженными очень долго.
Для таких случаев лучше использовать \+ ( generator(X), \+ action(X) )
, который терпит неудачу, если action(X)
не сработает для некоторого X
. Некоторые системы предлагают это как встроенный forall/2
. Лично я предпочитаю использовать \+
в этом случае, потому что \+
немного яснее, что конструкция не оставляет привязки.
Сбой. В диагностических целях часто полезно добавлять целевые false
в свои программы. Подробнее см. сбой .