Поднимите ошибку в SWI Пролог - PullRequest
5 голосов
/ 31 марта 2011

Я хотел бы напечатать сообщение и остановить оценку предиката.Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Взгляните на эту ссылку , где описаны механизмы catch / 3 и throw / 1 в Прологе.

С помощью этого механизма можно создать исключение или обработать исключение.

Пример (приведенный на сайте):

  p:- true.
  p:- throw(b).
  q:- catch(p, B, write('hellop')), r(c).
  r(X) :- throw(X).

Тогда звонок:

 ?- catch(p, X, (write('error from p'), nl)).

будет иллюстрировать обработку ecxeption.

1 голос
/ 13 декабря 2015

Я играл с несколькими другими примерами, которые нашел.Это может быть полезно.

p :- throw(b).
r(X) :- throw(X).
q:- catch(p, B, format('Output1: Error from throwing p')), r(B). 

catch(throw(exit(1)), exit(X), format('Output: `w', [X])).
Output: 1
1 is thrown to catcher 'exit(X)' and recovered by format('Output: ~w', [X])),

catch(p, C, format('hellop')).   
Output: hellop 
p throws 'b' which is recovered by writing 'hellop' 

catch(q, C, format('Output2, Recovering q: helloq ')).
Output1: Error from throwing p
Output2, Recovering q: helloq

Бен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...