Prolog:找到对某些术语 T 成立的所有一元谓词 P_1

Prolog: Finding all unary predicates P_1 that hold true for some term T

我有一些事实,例如:

person(david).

student(david).

我需要找到 david 所在的函子。所以我需要 post 查询,例如:

some_query(david)

我需要答案 personstudent.

我如何在 Prolog 中执行此操作? 谢谢!

如果不求助于解释器提供的一些特殊谓词,这是不可能的,即,这不再是纯粹的 Prolog,但对于 swi-prolog,这是可行的:

findFor(Const, X) :-
    current_predicate(X, Z),
    not(predicate_property(Z, built_in)),
    Z =.. [_, _],
    Y =.. [X, Const],
    call(Y).

然后只需调用:findFor(david, X),或者如果您希望在一个查询中获得所有答案,请使用 findAll.