我希望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
答案 0 :(得分:3)
使用catch/3
。例如:
?- catch(p, error(type_error(_,_),_), false).
false.
声明完全可以通过像这样的静默失败来替换类型错误。对于实例化错误,情况并非如此,因为实例化错误可以在您添加更多目标时转向解决方案,但类型错误则不能。