4
我想打印一条消息并停止对谓词的评估。我怎么做?在SWI Prolog中引发错误
我想打印一条消息并停止对谓词的评估。我怎么做?在SWI Prolog中引发错误
看看这个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处理。
我玩了一些我发现的其他例子。这可能是有用的。
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
本
这是很过分。我只是想显示一条消息并结束顶级谓词(如果你碰巧讲Haskell,那就和Haskell的'错误'不同)。例外情况打印丑陋的处理消息时,我不cacth他们。 – Koen 2011-03-31 14:08:21