2011-03-31 38 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