为了在一个简单的查询中运行一组查询,我标记了这些查询并使用forall/2
它们来调用它们:
query_all :-
forall(query(Q), (Q ->
format('yes: ~w~n',[Q]) ;
format('no : ~w~n',[Q]))).
所以如果我定义类似的东西query(true).
,我就可以yes: true
从输出中看到。
这里的问题是query( ... )
并不总是存在,当 prolog 找不到任何标记的内容query
时,forall/2
将失败并导致异常说“error(existence_error(procedure,query/1),forall/2)”
我想处理这个异常,但不想破坏整个控制流。
我知道catch/3会帮助我,但我不知道如何使用它,我的代码是:
catch(query_all, error(existence_error(procedure,_),_), recovery).
recovery :-
format('error occurred.~n',[]).
但序言说“不能重新定义本机代码过程 catch/3”。有什么我错过的吗?