忽略prolog中的类型错误并返回false

时间:2013-07-16 19:02:18

标签: prolog clpfd

我希望prolog引擎返回false而不是错误。 我有这段代码:

:-use_module(library(clpfd)).

set_1(X):-member(X,[f(f(1))]).
p :- X in 1..3,set_1(f(X)).

当我查询p时,出现错误:

?- p.
ERROR: Type error: `integer' expected, found `f(1)'

我希望输出看起来像:

 ?- p.
 false

即使我将成员(X,[f(f(1))]改为成员(X,[f(f(f(1)))]),或者其他一些人,我希望看到假设置,不对我的程序进行任何其他更改。

我正在使用swi-prolog v 5.10.4

1 个答案:

答案 0 :(得分:3)

使用catch/3。例如:

?- catch(p, error(type_error(_,_),_), false).
false.

声明完全可以通过像这样的静默失败来替换类型错误。对于实例化错误,情况并非如此,因为实例化错误可以在您添加更多目标时转向解决方案,但类型错误则不能。