Пролог, сбой и не отступать

Есть ли какой-либо встроенный предикат в SWI-Prolog, который всегда будет давать сбой и предотвращать возврат машины - это остановка немедленного выполнения программы (это не то, что делает fail/0)? Я мог бы использовать порезы, но они мне не нравятся.

Выполнение чего-то вроде !, fail для меня не проблема, но для того, чтобы достичь того, что я хочу, мне пришлось бы использовать разрезы в большем количестве мест, а это мне не нравится.


person Jerry    schedule 23.05.2010    source источник


Ответы (4)


Вы можете использовать исключения. Исходя из вашего вопроса - должно помочь. Обратитесь по ссылке

person Volodymyr Gubarkov    schedule 23.05.2010
comment
я ничего не вижу, когда нажимаю на вашу ссылку - person Nacht; 25.04.2012

Вы могли бы использовать механизм, специально разработанный для того, чтобы помочь вам в достижении чего-либо, но вам это не нравится?

Вы всегда можете использовать not, что является синтаксическим сахаром для сбоя вырезания

person patros    schedule 23.05.2010

На ум приходят две альтернативы:

  1. Передайте backtrack(true) или backtrack(false) термин в коде, которым вы хотите управлять, и интерпретируйте его в определении написанных вами предикатов так, чтобы он быстро завершился сбоем, если он установлен на backtrack(false), или чтобы продолжить, если backtrack(true). Обратите внимание, что на самом деле это не предотвратит возврат; он должен просто включить быстрый отказ. Даже если ваше дерево доказательств является глубоким, это должно обеспечить быстрый способ предотвращения выполнения определенного кода при возврате.
  2. Используйте исключения, как предлагает @Xonix (+1). Создание исключения немедленно прервет построение дерева доказательства, и вы можете передать любые данные термина через исключение обработчику, минуя дальнейшее выполнение - это, вероятно, будет быстрее, чем первый вариант, но может быть не таким переносимым.

Лично я раньше использовал оба метода - первый, когда я предполагал необходимость перед написанием кода, второй, где я этого не делал.

person Community    schedule 24.05.2010

Жаль, вот для чего нужны сокращения.

person Amadan    schedule 23.05.2010