2

我希望序言引擎返回 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

即使我将 member(X,[f(f(1))]) 更改为 member(X,[f(f(f(1)))]) 或其他一些集合,我也希望看到 false对我的程序进行任何其他更改。

我正在使用 swi-prolog v 5.10.4

4

1 回答 1

3

使用catch/3. 例子:

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

用这样的静默失败替换类型错误在声明上是完全可以的。这不适用于实例化错误,因为当您添加更多目标时,实例化错误可以转向解决方案,但类型错误不能。

于 2013-07-16T20:32:29.093 回答