2013-11-25 198 views
0

有没有一种方法可以查询SWI Prolog数据库来检查它是否不包含元素?SWI Prolog数据库

我曾尝试使用“不”,但似乎不适用于此版本的Prolog。

+1

如果你定义了类似'st(1).'的东西,当你执行你的程序时你输入一个查询'st(45).',你会得到'false'作为答案。这将意味着您创建的数据库不包含该元素。那是你要的吗? – Shevliaskovic

+1

也许你可以明确你尝试过什么,以什么方式“看起来不起作用”? – hardmath

+1

SWI-Prolog的7.1.0文档[敦促开发人员](http://www.swi-prolog.org/pldoc/doc_for?object=not/1)对新代码使用“\ +”而不是“不”。参见[页面底部](http://www.swi-prolog.org/pldoc/man?section=control)。但是,“不”应该仍然可用于向后兼容。 – hardmath

回答

2

也许您在寻找clause/2。一个虚拟会话样品

1 ?- [user]. 
|: a(1). 
|: a(2). 
|: a(X) :- b(X). 
|: b(3). 
|: b(4). 
% user://1 compiled 0.03 sec, 6 clauses 
true. 

2 ?- clause(a(X),Body). 
X = 1, 
Body = true ; 
X = 2, 
Body = true ; 
Body = b(X). 

3 ?- clause(b(X),Body). 
X = 3, 
Body = true ; 
X = 4, 
Body = true. 

4 ?- clause(c(X),Body). 
false. 

你可以看到,C/1没有被定义...

无论如何,SWI-Prolog的数据库是一个复杂的野兽,它提供了much more控制有关的内容。