2

使用此代码时,会引发此异常并且未返回失败:

在 Sicstus Polog 中:

number_codes/2 中的语法错误!数字语法!在第 0 行

在 SWI-Prolog 中:

错误:number_chars/2:语法错误:非法数字

number_codes(Number,"m"),
catch(number_codes(Number,List),error(syntax_error(_),_), fail). 

如何使它在此异常上返回失败。

4

2 回答 2

4

捕获语法错误的 ISO 方法是编写:

catch(number_codes(Number,"m"),error(syntax_error(_),_), fail).

第一个参数是要保护的目标,第二个参数是要捕获的模式。在这种情况下,您想要捕获错误。错误都是error(E,_)第一个参数是具体错误项的形式,在这种情况下syntax_error(_)。第二个参数是实现定义的。所以你不能依赖它的精确格式。

永远不要简单地抓住一切(如@CapelliC)所建议的。通过这种方式,您可能会无意中隐藏一些意外错误。

于 2013-11-24T10:11:20.433 回答
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 中测试过......)

于 2013-11-24T09:29:06.377 回答