Prolog:如何检查谓词是否存在?

vma*_*tto 9 prolog

如何检查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/2predicate_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/2predicate_property/2(可见)成功,如果谓词而被自动加载currrent_predicate/1失败