在SWI Prolog中引发错误

时间:2011-03-31 12:52:40

标签: prolog

我想打印一条消息并停止对谓词的评估。我该怎么做?

2 个答案:

答案 0 :(得分:2)

看一下这个link,其中描述了Prolog中的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 :(得分:1)

我玩了一些我发现的其他例子。这可能很有用。

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