2011-03-31 29 views

回答

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处理。

+3

这是很过分。我只是想显示一条消息并结束顶级谓词(如果你碰巧讲Haskell,那就和Haskell的'错误'不同)。例外情况打印丑陋的处理消息时,我不cacth他们。 – Koen 2011-03-31 14:08:21

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