我从一个空白数据库开始。我需要添加一些数据库条目,例如:
person(John,male)
person(Veronica,female)
person(Jessica,female)
我正在添加这样的条目:
add_person(N,G):-asserta(person(N,G)).
Howerver,我不想两次添加同一个人,所以我需要在添加之前进行检查。
我试图这样做:
add_person(N,G):- \+ person(N,G),asserta(person(N,G)).
问题是我无法查询数据库,如果我的数据库为空,请说person(John,male)
。所以person(N,G)
因存在错误而失败,我根本无法添加。
有什么想法吗?
答案 0 :(得分:2)
我不确定您使用的是哪种Prolog版本,但是您可以通过将此行放在代码的顶部来声明某些谓词是动态的:
:- dynamic person/2.
SWI-Prolog documentation中描述了这一点。
答案 1 :(得分:2)
你写John
的方式是变量而不是原子。你应该只使用小写的原子(john
,veronica
等)。我只是尝试了你的代码,它工作正常:
person(john, male).
add_person(N,G):-
\+ person(N,G),
asserta(person(N,G)).
再次添加john
失败并返回false
。