使用此代码时,引发了此异常并且未返回失败:
在Sicstus Polog中:
number_codes / 2中的语法错误 !数字语法 !在第0行
在SWI-Prolog中:
错误:number_chars / 2:语法错误:非法数字
number_codes(Number,"m"),
catch(number_codes(Number,List),error(syntax_error(_),_), fail).
如何使此异常返回失败。
答案 0 :(得分:3)
捕获语法错误的ISO方法是写:
catch(number_codes(Number,"m"),error(syntax_error(_),_), fail).
第一个参数是要保护的目标,第二个参数是要捕获的模式。在这种情况下,您希望捕获错误。错误都是error(E,_)
形式,其中第一个参数是具体的错误术语,在本例中为syntax_error(_)
。第二个参数是实现定义。所以你不能依赖它的精确格式。
从不只是抓住一切(如@CapelliC建议的那样)。通过这种方式,您可能会无意中隐藏一些意外错误。
答案 1 :(得分:1)
这应该是正确的语法来放弃'
?- catch(number_codes(X,"m"),_,true).
true.
?- catch(number_codes(X,"m"),_,false).
false.
检查错误详情,试试
?- catch(number_codes(X,"m"),error(E,C),(writeln(E:C),false)).
syntax_error(illegal_number):context(number_codes/2,_G12951)
false.
(我在SWI-Prolog中测试过......)