如何检查Prolog程序中是否存在谓词?这将是一个exists/1,如:
?- exists(some_predicate).
false.
?- assert(some_predicate).
true.
?- exists(some_predicate).
true.
Run Code Online (Sandbox Code Playgroud)
Tha*_*dis 13
你可以使用current_predicate/1,current_predicate/2或predicate_property/2(最后你可能需要functor/3):
?- current_predicate(a/1).
false.
?- functor(A,a,1),predicate_property(A,visible).
false.
?- functor(A,a,1),current_predicate(_,A).
false.
?- assert(a(42)).
true.
?- current_predicate(a/1).
true.
?- functor(A,a,1),predicate_property(A,visible).
A = a(_G136).
?- functor(A,a,1),current_predicate(_,A).
A = a(_G122).
Run Code Online (Sandbox Code Playgroud)
current_predicate/2和 predicate_property/2(可见)成功,如果谓词而被自动加载currrent_predicate/1失败