我有一个由一组规则组成的知识库,当某些条件出现时,其每个规则的标题都会执行复杂术语的断言或缩回。
如何确保每个Id
都增加assert(term(Id,A,B,C))
?
最佳答案
假设您不关心Id
中的漏洞(在收回id_person/2
子句时发生),则可以执行以下操作:
:-动态nextID / 1。
:-动态id_person / 2。
nextID(0)。
assertz_person(P):-
nextID(I),
缩回(nextID(I)),
I1是I + 1,
assertz(nextID(I1)),
assertz(id_person(I,P))。
使用示例(与SWI-Prolog 8.0.0和SICStus Prolog 4.5.0一起使用):
?-id_person(I,P)。
假。
?-assertz_person(joan),id_person(I,P)。
我= 0,P =琼。
?-assertz_person(al),assertz_person(ian),id_person(I,P)。
I = 0,P =琼
; I = 1,P = al
; I = 2,P = ian。