0
爲了運行一組簡單的查詢的查詢,我已標記的這些查詢和使用forall/2
打電話給他們:gprolog中的錯誤處理?
query_all :-
forall(query(Q), (Q ->
format('yes: ~w~n',[Q]) ;
format('no : ~w~n',[Q]))).
,所以如果我這樣定義query(true).
的東西,我就可以看到yes: true
從輸出。
這裏的問題是,query(...)
並不總是存在,在序言中找不到任何標記query
,forall/2
將失敗並導致異常說「錯誤(existence_error(程序,查詢/ 1),FORALL/2)」
我想處理這個異常,但不打破整個控制流程。
我知道catch/3會幫助我,但我不知道如何使用它,我的代碼是:
catch(query_all, error(existence_error(procedure,_),_), recovery).
recovery :-
format('error occurred.~n',[]).
但序言說:「本機代碼程序捕獲/ 3不能被重新定義。」 有什麼我錯過了?